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

本文解析了如何通过Java实现将两个非负整数A和B(小于2^30)相加,然后将结果转换为给定进制D(1<D≤10)。核心算法涉及除法取余法,并特别处理了和为0的特殊情况。展示了如何使用StringBuilder存储余数并逆序输出最终结果。

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());
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥旭手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值