前几天,朋友碰到了一个大数计算的问题,匆忙之下我写了一个出来。
代码说实话写的不怎么好,有点乱,先贴出来,然后过几天再改好,贴一下。
如计算:9999999999999 * 1234567890123
- package test;
- public class BigNumber {
- public static double[] d1 = {9,9,9,9,9,9,9,9,9,9,9,9,9};
- public static double[] d2 = {1,2,3,4,5,6,7,8,9,0,1,2,3};
- public static int[] calculate(double[] d1,double[] d2){
- int result_length = 0;
- int result_num = 0;
- double[]d1_temp = null;
- double[]d2_temp = null;
- int[] result_over = null;
- if(d1.length == d2.length){
- result_length = d1.length;
- result_num = result_length;
- d1_temp = d1;
- d2_temp = d2;
- } else {
- result_length = ( d1.length >= d2.length )? d1.length : d2.length;
- result_num = ( d1.length <= d2.length )? d1.length : d2.length;
- d1_temp = ( d1.length <= d2.length )? d1 : d2;
- d2_temp = ( d1.length >= d2.length )? d1 : d2;
- }
- double[][] result = new double[ result_num ][ result_length + 1 ];
- int temp = 0;
- for(int i = result_num - 1 ; i >= 0 ; i-- ){
- for(int j = result_length - 1 ; j >= 0 ; j-- ){
- temp += ( int ) ( d1_temp[ i ] * d2_temp[ j ] );
- result[i][ j + 1 ] = temp % 10;
- temp = temp / 10;
- }
- result[ i ][ 0 ] = temp;
- temp = 0;
- }
- temp = 0;
- int flag = 0;
- result_over = new int[result_num + result_length ];
- int line_flag = result_over.length - 1;
- for( int m = result[0].length - 1 ; m >=0 ; m-- ){
- flag = m;
- for( int n = result.length - 1 ; n >=0 ; n-- ){
- if( flag <= ( result[n].length - 1 )){
- temp += result[n][flag];
- } else {
- break;
- }
- flag++;
- }
- result_over[line_flag--] = temp % 10;
- temp = temp / 10;
- if(m == 0){
- if(result.length >= 2){
- for(int a = result.length - 2; a >= 0 ; a-- ){
- flag = 0;
- temp += result[a][flag++];
- for(int b = a - 1; b >= 0 ; b--){
- if( flag <= (result[b].length - 1) ){
- temp += result[b][flag];
- } else {
- break;
- }
- flag++;
- }
- result_over[line_flag--] = temp % 10;
- temp = temp / 10;
- }
- }
- }
- }
- return result_over;
- }
- public static void main(String[] args) {
- int[] d_result = calculate(d1,d2);
- for(int i = 0; i < d_result.length ; i++ ){//输出结果
- System.out.print(" " + d_result[i] + " ");
- }
- }
- }
-----------------------
结果为: 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