您的位置:首页 > 其它

PAT乙级1022. D进制的A+B (20)

2017-03-01 20:02 363 查看
这道题目唯一的坑就是所谓的2的30次方,我天真的以为结果也用long long星就可以了

结果发现A不过,unsigned之,依旧不过

最后发现改成后面的进制后,数字如果还是以10进制保存会浪费很多空间,且会超过2的30(32)次方

果断以余数递归的方法(注意输出语句的顺序),输出它,根据字符对应输出

#include <iostream>
using namespace std;

const char s[10] = {'0','1','2','3','4','5','6','7','8','9'};
void change (unsigned long long num ,int N) {
if (num) {
change(num/N,N); // 注意这两行的顺序
cout<<s[num%N];
}
}
int main(void) {
unsigned long long A {0}, B {0};
//求出A+B的和,并转换成D进制输出
int D {0};
cin>>A>>B>>D;
if (A+B)change(A+B,D);
else cout<<'0';
return 0;
}

原题地址:点击打开链接 点击打开链接 点击打开链接

输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入格式:

输入在一行中依次给出3个整数A、B和D。

输出格式:

输出A+B的D进制数。
输入样例:
123 456 8

输出样例:
1103
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: