文章目录
高精度和进制转换
问题描述
输入进制B,再输入两个B进制的数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。输出两数之和,用B进制表示。
P1604 B进制星球
解题思路
用字符数组接收输入数据,逆序转换为整型数组,再求和进位取余,最后进制转换输出。
完整代码
import java.util.Scanner;
public class Main {
static int[] a=new int[2002];
static int[] b=new int[2002];
static int[] c=new int[2002];
static int la,lb,lc,n;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
char[] x=sc.next().toCharArray();
char[] y=sc.next().toCharArray();
la=x.length; lb=y.length;
//将输入数据逆序转换为整型数组
for (int i = 0; i < la; i++) {
if(x[i]>='A' && x[i]<='Z')
a[la-i]=x[i]-'A'+10;
else
a[la-i]=x[i]-'0';
}
for (int i = 0; i < lb; i++) {
if(y[i]>='A' && y[i]<='Z')
b[lb-i]=y[i]-'A'+10;
else
b[lb-i]=y[i]-'0';
}
lc=Math.max(la, lb);
//从低位到高位进行求和运算
for (int i = 1; i <= lc; i++) {
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/n; //进位
c[i]%=n; //进位后取余
}
if(c[lc+1]>0) lc++; //对结果进位
String ans="";
for (int i = lc; i>=1; i--) {
if(c[i]>9)
ans+=(char)(c[i]-10+'A');
else
ans+=c[i];
}
System.out.println(ans);
}
}