海豚實習-實現兩個大數相乘,海豚實習大數相乘

來源:互聯網
上載者:User

海豚實習-實現兩個大數相乘,海豚實習大數相乘

   問題描述:定義大數d為一個數組,表示為:d=a[k-1]*10^(k-1)+a[k-2]*10^(k-2)+...+a[1]*10+a[0](k為數組長度),實現一個函數,返回兩個大數相乘的結果

   /**

     d1=a[k-1]*10^(k-1)+a[k-2]*10^(k-2)+...+a[1]*10+a[0]  

    d2=b[l-1]*10^(l-1)+b[l-2]*10^(l-2)+...+b[1]*10+b[0]

    d1*d2 包含k*l項,這隻是沒有合并的

    每一項可以表示為:d*10^x,然後將(x,d)放在map中,很多實現方法都是直接新產生一個 c[k*l]的數組來儲存,但是如果數組過大容易造成記憶體流失,像在java 中,常量池是根據JVM設定的,隨便搞個c[k*l]很容易溢出。所以還是搞個hashmap比較好。。。

*/

用java實現的代碼如下:

public static int[] bigDataMultiply(int[]d1,int []d2){//int []d=new int[100];Map<Integer, Integer> map=new HashMap<Integer, Integer>();for(int i=0;i<d1.length;i++)for(int j=0;j<d2.length;j++){if(map.containsKey(i+j)){map.put(i+j, map.get(i+j)+d1[d1.length-i-1]*d2[d2.length-j-1]);}else {map.put(i+j, d1[d1.length-i-1]*d2[d2.length-j-1]);}}//然後遍曆整個map,將一些資料分解合并//map中的可以是按照從小到達排列的for(int i=0;i<d1.length+d2.length;i++){if(map.containsKey(i)){//將d值分解int temp=map.get(i);map.put(i,temp%10);int j=0;while((temp/=10)>0)//大數相乘,並不一定相加只有兩位元,所以這裡要用一個迴圈{j++;map.put(i+j, map.containsKey(i+j)?(map.get(i+j)+temp%10):temp%10);}}}int []d=new int [map.size()];for(Integer k:map.keySet()){d[map.size()-k-1]=map.get(k);}return d;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.