首页 > 代码库 > 1813. M进制数问题
1813. M进制数问题
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<iostream>
using namespace std;
int map(char s){
return s-‘A‘+10;
}
void change(int n, int p){
int s[65];
int c;
int m=0;;
if(n==0) cout<<0;
while (n!=0)//数制转换,结果存入数组s[m]
{
c=n%p;
n=n/p;
m++;s[m]=c; //将余数按顺序存入数组s[m]中
}
for(int k=m;k>=1;k--)//输出转换后的序列
{
if(s[k]>=10) //若为十六进制等则输出相对应的字母
cout<<(char)(s[k]+55);
else //否则直接输出数字
cout<<s[k];
}
cout<<endl;
}
int main(){
int n;
cin>>n;
while(n--){
int a;
cin>>a;
string s,ss;
int c=0;
cin>>s>>ss;
for(int i=0;i<s.length();i++){
if(s[i]>=‘0‘&&s[i]<=‘9‘){
c = a*c + (s[i]-‘0‘);
}
else{
c = a*c + map(s[i]);
}
//cout<<c<<"#####"<<endl;
}
int cc=0;
for(int i=0;i<ss.length();i++){
if(s[i]>=‘0‘&&ss[i]<=‘9‘){
cc = cc*a + (ss[i]-‘0‘);
}
else{
cc = cc*a + map(ss[i]);
}
//cout<<cc<<"******"<<endl;
}
int t = c/cc;
int p = c%cc;
//cout<<"t="<<t<<endl;
//cout<<"p="<<p<<endl;
change(t,a);
change(p,a);
}
return 0;
}
1813. M进制数问题