1. 程式人生 > >大數相加問題(java版 )

大數相加問題(java版 )

兩個大數相加,如果把數字轉換成字串,那麼無論多大的數都可以相加了,將兩位數做加法的過程用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; } } }