大数间的乘法计算--大数计算

前几天,朋友碰到了一个大数计算的问题,匆忙之下我写了一个出来。

代码说实话写的不怎么好,有点乱,先贴出来,然后过几天再改好,贴一下。

 

如计算:9999999999999  * 1234567890123

  1. package test;
  2. public class BigNumber {
  3.     
  4.     public static double[] d1 = {9,9,9,9,9,9,9,9,9,9,9,9,9};
  5.     
  6.     public static double[] d2 = {1,2,3,4,5,6,7,8,9,0,1,2,3};
  7.     
  8.     public static int[] calculate(double[] d1,double[] d2){
  9.         
  10.         int result_length = 0;
  11.         
  12.         int result_num = 0;
  13.         
  14.         double[]d1_temp = null;
  15.         
  16.         double[]d2_temp = null;
  17.         
  18.         int[] result_over = null;
  19.         
  20.         if(d1.length == d2.length){
  21.             
  22.             result_length = d1.length;
  23.             
  24.             result_num = result_length;
  25.             
  26.             d1_temp = d1;
  27.             
  28.             d2_temp = d2;
  29.             
  30.         } else {
  31.             
  32.             result_length = ( d1.length  >= d2.length )? d1.length : d2.length;
  33.             
  34.             result_num = ( d1.length  <= d2.length )? d1.length : d2.length;
  35.             
  36.             d1_temp = ( d1.length  <= d2.length )? d1 : d2;
  37.             
  38.             d2_temp = ( d1.length  >= d2.length )? d1 : d2;
  39.             
  40.         }
  41.         
  42.         double[][] result = new double[ result_num ][ result_length + 1 ];
  43.         
  44.         int temp = 0;
  45.         
  46.         for(int i = result_num - 1 ; i >= 0 ; i-- ){
  47.             
  48.             for(int j = result_length - 1 ; j >= 0 ; j-- ){
  49.                 
  50.                 temp += ( int ) ( d1_temp[ i ] * d2_temp[ j ] );
  51.                 
  52.                 result[i][ j + 1 ] = temp % 10;
  53.                 
  54.                 temp = temp / 10;
  55.                           
  56.             }
  57.             
  58.             result[ i ][ 0 ] = temp;
  59.                       
  60.             temp = 0;
  61.             
  62.         }
  63.         
  64.         temp = 0;
  65.         
  66.         int flag = 0;
  67.         
  68.         result_over = new int[result_num + result_length ];
  69.         
  70.         int line_flag = result_over.length - 1;
  71.             
  72.             forint m = result[0].length - 1  ; m >=0 ; m-- ){
  73.                 
  74.                 flag = m;
  75.                 
  76.                 forint n = result.length - 1  ; n >=0 ; n-- ){
  77.                     
  78.                     if(  flag <= ( result[n].length - 1 )){
  79.                         
  80.                         temp += result[n][flag];
  81.                         
  82.                     } else {
  83.                         
  84.                         break;
  85.                         
  86.                     }
  87.                     
  88.                     flag++;
  89.                     
  90.                 }
  91.                 
  92.                 result_over[line_flag--] = temp % 10;
  93.                 
  94.                 temp = temp / 10;
  95.                 
  96.                 if(m == 0){
  97.                     
  98.                     if(result.length >= 2){
  99.                         
  100.                         for(int a = result.length - 2; a >= 0 ; a-- ){
  101.                             
  102.                             flag = 0;
  103.                             
  104.                             temp += result[a][flag++];
  105.                             
  106.                             for(int b = a - 1; b >= 0 ; b--){
  107.                                 
  108.                                 if( flag <= (result[b].length - 1) ){
  109.                                     
  110.                                     temp  += result[b][flag];
  111.                                     
  112.                                 } else {
  113.                                     
  114.                                     break;
  115.                                     
  116.                                 }
  117.                                 
  118.                                 flag++;
  119.                                 
  120.                             }
  121.                             
  122.                             result_over[line_flag--] = temp % 10;
  123.                             
  124.                             temp = temp / 10;
  125.                             
  126.                         }
  127.                         
  128.                     }
  129.                     
  130.                 }
  131.                 
  132.             }
  133.         
  134.         
  135.         return result_over;
  136.         
  137.     }
  138.     
  139.     public static void main(String[] args) {
  140.         
  141.         int[] d_result = calculate(d1,d2);
  142.         for(int i = 0; i < d_result.length ; i++ ){//输出结果
  143.             
  144.             System.out.print(" " + d_result[i] + " ");
  145.             
  146.         }
  147.         
  148.         
  149.     }
  150. }

 

-----------------------

结果为: 1  2  3  4  5  6  7  8  9  0  1  2  2  8  7  6  5  4  3  2  1  0  9  8  7  7

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值