1813. M进制数问题
| |||||||||
| |||||||||
Time Limit: 1sec Memory Limit:32MB
Description
试用 C++的类来表示一般进制数。 给定 2 个n位m进制整数A和B,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值。
Input
输入包含多个测试点。第一行为一个整数T,表示测试点数。 对于每个测试点第 1 行是进制 m 。第 2 行和第 3 行分别给出 m 进制整数 A 和 B。 所有 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. }
|