1813. M进制数问题
Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
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
1 16 29FA5 7
Sample Output
5FF3 0
#include <cstring>
#include <algorithm>
using namespace std;
//将M 进制转换为10进制
int changeToD(string s, int m)
{
int len = s.size();
int tmp, num=0;
for(int i=0; i<len; i++)
{
if(s[i] >= '0' && s[i] <= '9')
tmp = s[i] - '0';
if(s[i] >= 'A' && s[i] <= 'Z')
tmp = s[i] - 'A' + 10;
num = num*m + tmp ;
}
return num;
}
//将10进制转为M 进制
string changeToM(int num, int m)
{
string table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string result = "";
string s = "";
if(num == 0)
return "0";
int tmp = num;
while(tmp != 0)
{
result = result + table[tmp%m];
tmp = tmp/m;
}
for(int i = result.size()-1; i>=0; i--)
{
s = s + result[i];
}
return s;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int m;
string A, B;
cin>>m;
cin>>A>>B;
int a = changeToD(A, m);
int b = changeToD(B, m);
string result1 = changeToM(a/b, m);
string result2 = changeToM(a%b, m);
cout<<result1<<endl;
cout<<result2<<endl;
}
// system("pause");
return 0;
}