大數相加問題(java版 )
阿新 • • 發佈:2018-12-15
兩個大數相加,如果把數字轉換成字串,那麼無論多大的數都可以相加了,將兩位數做加法的過程用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;
}
}
}