PAT Basic 1022. D进制的A+B
PAT Basic 1022. D进制的A+B
1. 题目描述:
输入两个非负 10 进制整数 \(A\) 和 \(B\) (\(≤2^{30}−1\)),输出 \(A+B\) 的 \(D\) (\(1<D≤10\))进制数。
2. 输入格式:
输入在一行中依次给出 3 个整数 \(A\)、\(B\) 和 \(D\)。
3. 输出格式:
输出 \(A+B\) 的 \(D\) 进制数。
4. 输入样例:
123 456 8
5. 输出样例:
1103
6. 性能要求:
Code Size Limit
16 KB
Time Limit
200 ms
Memory Limit
64 MB
思路:
考察进制转换的知识,类似十进制到二进制,将十进制数对基数(base)取余得到低位,然后除以基数再对基数取余得到较高位,反复进行直到十进制数为0(有点类似取十进制数各位数字)。
这里\(A+B\)最大为\(2^{31}-2\),用最低的二进制表示最多有31位数字,所以这里定义长度为32的字符数组存储结果即可。
另外要注意和为0的情况,一开始testpoint3没过。
My Code:
#include <stdio.h>
int main(void)
{
int numA = 0, numB = 0, degree = 0;
char res[32];
int sum = 0, count = 0;
scanf("%d%d%d", &numA, &numB, °ree);
sum = numA+numB;
while(sum)
{
res[count] = sum % degree + '0';
sum /= degree;
count++;
}
if(count)
{
for(int i=count-1; i>=0; i--)
printf("%c", res[i]);
}
else // here first submit forgot treat '0', testpoint3 reject
printf("0");
printf("\n");
return 0;
}