两个大数相加,如果把数字转换成字符串,那么无论多大的数都可以相加了,将两位数做加法的过程用java代码模拟出来,那么这个问题就得到了解决。
package com.zhangyike.bigNum;
import java.util.Scanner;
public class AndBigNumber {
public static void main(String[] args) {
Scanner can = new Scanner(System.in);
try{
String line1 = can.nextLine().trim();
String line2 = can.nextLine().trim();
String result = addBigInteger(line1,line2);
System.out.println(result);
}finally{
can.close();
}
}
public static String addBigInteger(String num1, String num2)
{
int len1 = num1.length();
int i = len1-1;
int len2 = num2.length();
int j = len2-1;
int len = len1 > len2 ? len1 : len2;
int k = len;
//结果存放的数组,数组的长度是num1和num2中最长的那个字符串的长度+1,这个肯定能存放结果。
char[] result = new char[len + 1];
char[] ca1 = num1.toCharArray();
char[] ca2 = num2.toCharArray();
int res = 0;//每次相加的结果
int carry = 0;//进位数
while (i > -1 && j > -1) {
res = toInt(ca1[i--]) + toInt(ca2[j--]) + carry;//两个数中对应的位数相加+进位数
result[k--] = toChar(res%10);//不进入的数保存到结果集中
carry = res/10;//进位数
}
//num1比num2长,要把num1长的部分加上去
while(i > -1 ) {
res = toInt(ca1[i--]) + carry;
result[k--] = toChar(res%10);
carry = res/10;
}
//num2比num1长,要把num2长的部分加上去
while(j > -1) {
res = toInt(ca2[j--]) + carry;
result[k--] = toChar(res%10);
carry = res/10;
}
result[k--] = toChar(carry);//最后一个进位数
return new String(result);//将char转换成字符串
}
//将int转换为char
public static char toChar(int c){
return String.valueOf(c).charAt(0);
}
//将char转换为int
public static int toInt(char c){
try {
return Integer.valueOf(c + "");
} catch (Exception e) {
return 0;
}
}
}