1813. M进制数问题

来源:互联网 发布:微信域名入口页 编辑:程序博客网 时间:2024/05/29 09:43

1813. M进制数问题
  
Total: 1075Accepted:326Rating:
2.6/5.0(9 votes)
012345
    

    
Time Limit: 1sec Memory Limit:32MB
Description

试用 C++的类来表示一般进制数。

给定 2 个nm进制整数AB,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值。

Input

输入包含多个测试点。第一行为一个整数T,表示测试点数。

对于每个测试点第 1 行是进制 m 。第 2 行和第 3 行分别给出 m 进制整数 AB

所有 m 进制数的10进制表示均不超出int范围。

 

Output

对于每个测试点,第一行输出 m 进制数整数 P = A / B 的值,第二行输出 Q = A % B 的值。

Sample Input
Copy sample input to clipboard
11629FA57
Sample Output
5FF30
    
 

思路 将当位数字超过10的转换为数字-》将该m进制数转为10进制-》运算-》转换回来m进制

代码如下:(注意,size不能设得太小,之前设个size=10,结果function restriction,后来改为16(int 长度),问题解决)

 

// source code of submission 736612, Zhongshan University Online Judge System
002.#include<iostream>
003.#include<cstring>
004.#include<stdio.h>
005.#include<cmath>
006.#define size 16
007.using namespace std;
008.class Step
009.{
010.public:
011.int step; //进制数
012.char num[size]; //用于储存m进制数含字母表示方法
013.int Dnum; //转换为10进制之后的数据
014.Step(int m) //constructor
015. {
016. cin>>num;
017. step=m;
018. Dnum=0;
019. }
020.int mToD() //m进制转10进制
021. {
022.int i;
023.int len=strlen(num);
024. for(i=0;i<len;i++)
025. {
026. if(num[i]>='0'&&num[i]<='9')
027. {
028. Dnum=Dnum+(num[i]-'0')*(int)pow((double)step,len-i-1);
029. }
030.else if(num[i]>='A'&&num[i]<='Z')
031. {
032. Dnum=Dnum+(num[i]-'A'+10)*(int)pow((double)step,len-i-1);
033. }
034. }
035.return 0;
036. }
037.
038.};
039.
040.int dToM(int num,int step) //十进制转m进制,直接在函数中输出到屏幕中
041.{
042.char mNum[size];
043.int i;
044. for(i=0;;i++)
045. {
046. if(num<step)
047. {
048. if(num>=10)
049. {
050. mNum[i]=num-10+'A';
051. }
052. else
053. {
054. mNum[i]=num+'0';
055. }
056. i++;
057. break;
058. }
059. else
060. {
061. if(num%step>=10)
062. {
063. mNum[i]=num%step+'A'-10;
064. num=num/step;
065. }
066. else
067. {
068. mNum[i]=num%step+'0';
069. num=num/step;
070. }
071. }
072.
073. }
074.for(int j=i-1;j>=0;j--)
075. {
076. cout<<mNum[j];
077. }
078. cout<<endl;
079.return 0;
080.}
081.
082.int main()
083.{
084.int t;
085. cin>>t;
086. while(t--)
087. {
088.int step;
089. cin>>step;
090. Step a(step);
091. Step b(step);
092. a.mToD();
093. b.mToD();
094.int shang,yu;
095. shang=a.Dnum/b.Dnum;
096. yu=a.Dnum%b.Dnum;
097. dToM(shang,step);
098. dToM(yu,step);
099. }
100.return 0;
101.}

原创粉丝点击