原题是 PAT 乙级 1022. D 进制的 A + B,稍微修改下
问题描述
输入两个
D 进制的非负整数
A 和 B (≤230-1),输出 A + B 的 D (1 < D ≤ 10) 进制数。
输入格式
输入在一行中一次给出 3 个整数 A、B、D。
输出格式
输出 A + B 的 D 进制数。
题解 1
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int a, b, d;
cin >> a >> b >> d;
// 将 d 进制的 a、b 转成 10 进制后,求和
int a10 = 0, b10 = 0, s10 = 0;
int i = 0;
while(a) {
int n = a % 10;
a10 += n * pow(d, i++);
a /= 10;
}
int j = 0;
while(b) {
int n = b % 10;
b10 += n * pow(d, j++);
b /= 10;
}
s10 = a10 + b10;
// 再将和转成 d 进制
int ansD[11] = {0};
int lenD = 0;
int k = 0;
while(s10) {
ansD[k++] = s10 % d;
s10 /= d;
}
for(int i=k-1; i>=0; i--) {
cout << ansD[i];
}
return 0;
}