输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
这道题可以用模拟手工的方法。
用穷举法,似乎也能做,但是应该会超时。
#include<iostream> #include<math.h> using namespace std; void toD(int S, int D); int main() { int A, B,D; cin >> A >> B>>D; int S = A + B; toD(S, D); return 0; } void toD(int S,int D) { int maxP=0; for (int i = 0; i < 31; i++) { if (pow(D, i) <= S && pow(D,i+1)>S) { maxP = i; break; } } int *a = new int[maxP+1]; for (int i = 0; i <= maxP; i++) a[i] = 0; int yu = S; for (int i = maxP; i >= 0; i--) { if (yu > 0) { for (int j = 0; j < D; j++) { if ((yu - j * pow(D, i) >= 0 && yu - (j + 1)* pow(D, i) < 0)) { a[i] = j; yu -= j * pow(D, i); } } } } for (int i = maxP; i >= 0; i--) { cout << a[i]; } }
网上看到这题有更简单的做法:
#include <iostream> using namespace std; int main() { int a, b, d; cin >> a >> b >> d; int t = a + b; if (t == 0) { cout << 0; return 0; } int s[100]; int i = 0; while (t != 0) { s[i++] = t % d; t = t / d; } for (int j = i - 1; j >= 0; j--) { cout << s[j]; } return 0; }
不过,这样只能计算D<=10的情况(也就是题目的要求)。