高精度算法

高精度和进制转换

问题描述
输入进制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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值