PAT乙级(Basic Level)练习题 数位和

题目描述
把一个整数的各位累加,NowCoder称它为“数位和”。例如正整数123456的数位和是1+2+3+4+5+6=21。现在,请你帮忙计算一个整数n在r进制下的数位和,并用相应的进制输出结果。

输入描述:
输入有多组数据。
每组数据包含两个正整数n (1≤n≤2147483647)和r (2≤n≤16)。

输出描述:
对应每一组数据,输出十进制正整数n转换成r进制后的数位和,并用r进制输出结果。

输入例子:

123456 10
123456 2

输出例子:

21
110

\color{blue}解题思路:
还是进制转换的题,这么多水题。。。
与上一题 PAT乙级(Basic Level)练习题 外星人的语言 几乎一毛一样。。。

\color{blue}代码实现:

#include <iostream>
#include <string>
using namespace std;

int main(int argc, const char * argv[]) {
    int n = 0, r = 0;
    //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%d %d", &n, &r) != - 1) {
        int resNum = 0;
        string resStr = "";
        //只要n!=0,则说明还需要进位转换
        while (n != 0) {
            //所有的余数即是进制转换后的结果
            resNum += n % r;
            n /= r;
        }
        //将resNum转换为r进制,可以封装成一个函数
        while (resNum != 0) {
            char ch = resNum % r;
            //转换为响应的数字字符,超过10需要转成A、B、C等大写字母
            if (ch > 9) {
                ch += 'A' - 10;
            } else {
                ch += '0';
            }
            //逆序拼接,因为我们是从低到高位进行转换
            resStr = ch + resStr;
            resNum /= r;
        }
        //输出结果字符串
        printf("%s\n", resStr.c_str());
    }
    return 0;
}

在这里插入图片描述

发布了1005 篇原创文章 · 获赞 269 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104660621
今日推荐