PAT Basic 1022 D进制的A+B

题目

输入两个非负 10 进制整数 AB (≤230−1),输出 A+BD (1<D≤10)进制数。

输入格式:

输入在一行中依次给出 3 个整数 ABD

输出格式:

输出 A+BD 进制数。

输入样例:

123 456 8

输出样例:

1103

 

思路

类似于手动计算二进制,将每一次求模的余数写入数组,然后再将数组倒序输出。


PAT Basic 1022 D进制的A+B_第1张图片
图1:手动计算本题输入样例

 

代码

#include
#include

int main()
{
    int a = 0, b = 0, sum = 0, d = 0;
    int n[32], i = 0;
    scanf("%d%d%d", &a, &b, &d);
    sum = a + b;

    while(sum >= d)
    {
        n[i++] = sum % d;
        sum /= d;
    }
    n[i] = sum;

    while(i)
        printf("%d", n[i--]);
    printf("%d\n", n[0]);

    return 0;
}

 

心得

一种很简洁的解法,参考自OliverLew

思路分析

比方说我们求 20 的二进制,先找出最接近的 20 的 2n ->也就是 24, 再找最接近 20 - 24 的 2n,一直到剩下 0 或 1。

代码
#include 
int main()
{
    int A, B, D, Sum;
    scanf("%d %d %d", &A, &B, &D);
    Sum = A + B;

    int power = 1;
    while(Sum / D >= power) {
        power *= D;
        printf("power=%d\n", power); // 测试语句
    }

    for(; power > 0; Sum %= power, power /= D)
    {
        printf("Sum = %d power = %d\n", Sum, power);
        printf("Sum/power = %d\n", Sum / power); // 测试语句
    }

    return 0;
}

输入:

123 456 8

输出:

123 456 8
power=8
power=64
power=512
Sum = 579 power = 512
Sum/power = 1
Sum = 67 power = 64
Sum/power = 1
Sum = 3 power = 8
Sum/power = 0
Sum = 3 power = 1
Sum/power = 3

你可能感兴趣的:(PAT Basic 1022 D进制的A+B)