PAT 乙级 1022 D进制的A+B

310 阅读1分钟

题目描述

输入两个非负 10 进制整数 A 和 B (≤2^30−1),输出 A+B 的 D (1<D≤10)进制数。 输入格式: 输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式: 输出 A+B 的 D 进制数。

输入样例:
123 456 8
输出样例:
1103

思路分析、

下面这张图演示的是辗转相除法将十进制转换为二进制
不断对十进制数用D辗转相除所得余数逆序即为要转换的进制数

ca1349540923dd541c85c505d009b3de9d8248ec.gif

AC代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long a,b,d,n;
    int x[1000]={0};
    cin>>a>>b>>d;
    n=a+b;
    if(n==0)//注意,这是一个特殊的测试点!
    {
        cout<<0;
        return 0;
    }
    int i=0;
    while(n!=0)
    {
        x[i++]=n%d;
        n/=d;
    }
    while(i--)
        cout<<x[i];
    return 0;
}

总结感悟

锲而不舍,金石可镂
先睡了,养精蓄锐,明天再接着刷题!