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, &degree);
    
    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;
}
posted @ 2023-03-12 16:55  十豆加日月  阅读(8)  评论(0编辑  收藏  举报