1. 程式人生 > >關於大數相乘問題(Java實現)

關於大數相乘問題(Java實現)

//假設有兩個數,這兩個數非常大而且無法用Java的整數型別表示,遠遠超出計算機的表達範圍,用計算這兩個數相乘的結果。我們首先應該想用字串來表達這兩個數,假設這兩個字串為n與m,那麼這兩個數相乘結果的位數為n+m或者是n+m-1,通過藉助輔助空間O(n+m)來儲存進位來幫助實現。
演算法評價:
時間複雜度:O(n*m),空間複雜度O(n+m)(由於涉及到進位可能最壞時間複雜度遠遠超過了O(n*m))

public class BigNumMSultiply {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
String n="1231111111111111111111111"; String m="222331111111453532222222222"; char[] chs=new char[n.length()+m.length()]; for(int i=0;i<chs.length;i++){ chs[i]='0'; } int n1=0; int m1=0; int res=0; int startIndex=0; int
num=0; String reString=""; for(int i=n.length()-1;i>=0;i--){ n1=n.charAt(i)-'0'; startIndex=n.length()-1-i; for(int j=m.length()-1;j>=0;j--){ m1=m.charAt(j)-'0'; res=n1*m1; loopAdd(chs,res,startIndex); ++startIndex; } } for
(int i=chs.length-1;i>=0;i--){ if(chs[i]=='0'&&i==chs.length-1){ continue; } reString=reString+chs[i]; } System.out.println(reString); } private static void loopAdd(char[] chs,int num,int startIndex){ int mod=0; int index=0; mod=num%10; index=num/10; int data=chs[startIndex]-'0'+mod; while(true){ if(data<10){ chs[startIndex]=(char) (data+'0'); break; }else{ chs[startIndex]=(char) (data%10+'0'); data=data/10+index+chs[startIndex+1]-'0'; mod=data%10; index=data/10; startIndex++; } } } }