PAT乙级1022,除K取余法,有详细题目解析

1022 D进制的A+B (20分)

输入两个非负 10 进制整数AB(≤230

−1),输出A+BD(1<D≤10)进制数。

输入格式:

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

输出格式:

输出A+BD进制数。

输入样例:

123 456 8

输出样例:

1103

题目解析:
这道题不难理解,就是给两个正整数A,B(≤230−1),在int范围内,A+B=sum也在int范围内,直接用int存储就可。

把十进制的sum转换成D进制的数字输出,这道题的核心算法就是除K取余法。但容易忽略0这种特殊情况,测试点3就是sum是0的情况,需要单独考虑,因为0不适合除K取余法,而且0的任何进制都是0。

AC代码:

import java.util.Scanner;
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner s=new Scanner(System.in);
        //不需要知道A和B,直接求和就可以了
        int sum=s.nextInt()+s.nextInt();
        //D进制
        int D=s.nextInt();
        //调用方法,记得这里改成Main
        Main pat=new Main();
        pat.radix(sum,D);
    }
    //这里定义一个方法,给一个十进制的数和D,输出D进制的数字
    //这个方法是十进制数转化为其它进制数常用的除K取余法
    public void radix(int sum,int D){
    
    
        //提前考虑0这种特殊情况,测试点3是0
        if(sum==0){
    
    
            System.out.print(0);
            return;
        }
        //sb中存放所有的余数
        StringBuilder sb=new StringBuilder();
        //除K取余法
        while(sum!=0){
    
    
            sb.append(sum%D);
            sum/=D;
        }
        //sb倒序输出就是最后的结果
        System.out.println(sb.reverse());
    }
}

更多题目解析在公众号算法宝贝

猜你喜欢

转载自blog.csdn.net/CSDN_Lrcx/article/details/116167935
今日推荐