题目:
输入两个非负 10 进制整数 A 和 B (≤2^30−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
思路:
一个整数(十进制数)的D进制就是他不断取余,整除的过程,叫除基取余法。如果不记得公式,可以度娘一下公式,非常好理解。
简单来说,本题的解题思路即为,对输入的十进制数之和取余,然后倒排后即为正确答案。
注意:
写者在解题过程中忘记考虑本题的一大坑点:当A,B的取值皆为0时的情况。因而导致其中的第3个测试点未过,因此解题时切记考虑全面。
解题代码:
#include <iostream>
#define MAXN 10000
using namespace std;
int main() {
int a, b, d, sum = 0, count = 0; // count为数组记录下标
int num[MAXN];
cin >> a >> b >> d;
sum = a + b; // 将结果转换为一个十进制数方便解题
// 此处也可定义函数分别判断转换A,B
// 本题坑点所在
if(sum == 0) {
cout << count;
}
// 循环取余并将余数依次放入num数组中
while(sum != 0) {
int temp = sum % d; // temp临时变量循环接收余数
sum /= d;
num[count++] = temp;
}
// for循环倒排得出答案
for(int i = count - 1; i >= 0; i--) {
cout << num[i];
}
return 0;
}
结语:
本题用C语言也可以是上述解法,只需改变头文件及些许语法格式即可实现C语言解法。
写者是pta新手玩家,第一次写博客,分享一下自己的解题思路,希望能与大佬们多多交流。