兩個大數相乘-Java


兩個字符串表示兩個非常大的數,請設計算法計算這兩個大數的乘積,結果用字符串表示。例如S1=”7832974972840919321747983209327”,S2=”1987432091904327543957”,設計算法計算出S1*S2的結果,結果用String輸出,不准用BigInter。

思路:
根據手工計算兩數相乘的過程,用代碼實現這個過程。

代碼:

import java.util.Scanner;
public class DaZhengShuChengJi {
        public static void main(String[] args) {
            System.out.println(multiply(num1, num2));
        }
        public static String multiply(String num1, String num2) {
            int l = num1.length();
            int r = num2.length();
            //用來存儲結果的數組,可以肯定的是兩數相乘的結果的長度,肯定不會大於兩個數各自長度的和。
            int[] num = new int[l+r];
            //第一個數按位循環
            for(int i=0;i<l;i++) {
                //得到最低位的數字
                int n1=num1.charAt(l-1-i)-'0';
                //保存進位
                int tmp=0;
                //第二個數按位循環
                for(int j=0;j<r;j++) {
                    int n2=num2.charAt(r-1-j)-'0';
                    //拿出此時的結果數組里存的數+現在計算的結果數+上一個進位數
                    tmp=tmp+num[i+j]+n1*n2;
                    //得到此時結果位的值
                    num[i+j]=tmp%10;
                    //此時的進位
                    tmp/=10;
                }
                //第一輪結束后,如果有進位,將其放入到更高位
                num[i+r]=tmp;
            }

            int i=l+r-1;
            //計算最終結果值到底是幾位數,
            while(i>0&&num[i]==0){
                i--;
            }
            StringBuilder result="";
            //將數組結果反過來放,符合正常讀的順序,
           //數組保存的是:1 2 3 4 5 
           //但其表達的是54321,五萬四千三百二十一。
            while(i>=0) {
                result += num[i--];
            }
           return result;
        }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM