数位和

前言

牛客网PAT乙级训练1018

题目描述

把一个整数的各位累加,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

解析

题目其实不难,思路也很清晰,先转换成对应进制的数然后在十进制下求和,然后再转换成相应进制即可。

  • 难点在于,当进制数超过10时,会出现字母,如何进行字母的运算。
    以下方法可以解决:
10 + (ch - 'a');

遇到小写十六进制数转换成数字时用
比如0x0b应当对应十进制11
如果我拿到字符:'b',将之转换成11的方法就是
'b'-'a'得到1,加10得到11,同理'f'-'a'+10=15

解决方案

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int num = scanner.nextInt();
            int n = scanner.nextInt();
            String n_num = Integer.toString(num, n);
            int sum = 0;
            for (char ch : n_num.toCharArray()) {
                if (Character.isDigit(ch)) sum += ch - '0';
                else sum += 10 + (ch - 'a');    //得到对应10进制下的数
            }
            System.out.println(Integer.toString(sum, n).toUpperCase());
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我刚看完了《安妮日记》,背景是二战时犹太人被追杀,里面说的是 有两家人在基督徒的帮助下在密室里度日发生的一系列事情...
    黄晴晴阅读 1,482评论 1 0
  • 陆献回来时,已经是凌晨一点过。 彼时的沈芫已经睡得有些迷糊了,自从上次陆献看见自己的醉酒,竟然破天荒的命人置备了冰...
    阙里阅读 3,089评论 0 0