PAT乙级1022 || D进制的A+B(CC++)

    xiaoxiao2022-07-07  150

    【欢迎关注微信公众号:计算机黑科学大全,在对话框回复:PAT乙级真题】获取全部真题详解及代码示例

    D进制的A+B

    题目描述:

    输入两个非负 10 进制整数 A 和 B (≤ 2 30 2^{30} 230 −1),输出 A+B 的 D (1<D≤10)进制数。

    输入格式:

    输入在一行中依次给出 3 个整数 A、B 和 D。

    输出格式:

    输出 A+B 的 D 进制数。

    输入样例:

    123 456 8

    输出样例:

    1103

    题目来源:PAT乙级1022 作者:CHEN, Yue 单位:浙江大学

    问题解决:

    解题思想

    我们应该都很熟悉十进制转换为二进制的除留取余法,本题的转换为D进制方法同理。先求A加B的十进制和sum,十进制sum转换为D进制具体方法如下:

    sum除以D的余数存入数组re[]sum除以D的结果继续赋值给sum重复1,2过程,直到sum为0最后顺次倒序输出余数数组re[]

    代码示例(C/C++)

    小提示:请将以下代码保存为.cpp格式(C++程序)左右滑动代码可查看全部内容

    //除留取余法 #include <cstdio> #define MAXN 32 using namespace std; int main() { unsigned int a,b,d,sum,re[MAXN];//re[]倒序存入sum转换成d进制的每一位,re[0]存sum最高位 scanf("%d%d%d",&a,&b,&d); sum = a + b;//a与b的十进制和 int i = 0; do{ re[i++] = sum % d; sum /= d; }while(sum != 0); while(i--){//上面的循环中i多加了1 printf("%d",re[i]); } return 0; }

    最新回复(0)