1022 D进制的A+B (20分)
输入两个非负 10 进制整数A和B(≤230
−1),输出A+B的D(1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:
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());
}
}
更多题目解析在公众号算法宝贝