PAT乙级真题
题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344
引入:
输入两个非负 10 进制整数 A 和 B ( ≤ 230 − 1),输出 A + B 的 D (1 < D ≤ 10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出A + B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
分析:
题目中给出的A,B的范围很大,所以只能用循环求每一位上的数的方法去写。
以题给的8进制为例,64是8个 8,是100,65比8个8多1,是101;512是64个8,是1000,520比64个8多8,是1010。可以看出多出来的这些数是余数。
所以我们可以考虑用整除和取余的方式求解。
除以第一个8得到的余数就是个位数,除以第二个64得到的余数就是第二位数,以此类推,将余数存入数组,后续输出反向输出即可。
注意要考虑A+B等于0的情况。
#include <iostream>
using namespace std;
int main(){
int A, B, D;
cin >> A >> B >> D;
int num, cnt = 0;
int re[1000] = {0};
num = A + B;
if(num == 0){
cout << 0;
return 0;
}
while(num != 0){
re[cnt] = num % D;
num /= D;
cnt++;
}
for(int i = cnt - 1; i >= 0; i--){
cout << re[i];
}
}
悄咪咪表白柳婼大佬