BigNumMult

  1. public class BigNumMult {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.         String x = "30004343435343434343534543526566456545454433454646544432332423424234954352900";   
  6.         String y = "535353212313242423435456423423434534624267768899089786756564577567535353";   
  7.   
  8. //      x = x.replaceFirst("^0*", "");   
  9. //      y = y.replaceFirst("^0*", "");   
  10.         String z = mult(x, y);   
  11.   
  12.         System.out.println("x=" + x);   
  13.         System.out.println("y=" + y);   
  14.         System.out.println("x*y=" + z);   
  15.     }   
  16.   
  17.     private static String mult(String x, String y) {   
  18.   
  19.         return mult(x.toCharArray(), y.toCharArray());   
  20.     }   
  21.   
  22.     private static String mult(char[] x, char[] y) {   
  23.   
  24.         int[] xi = new int[x.length];   
  25.   
  26.         for (int i = 0; i < x.length; i++) {   
  27.             xi[i] = Integer.valueOf(Character.toString(x[i]));   
  28.         }   
  29.   
  30.         int[] yi = new int[y.length];   
  31.         for (int i = 0; i < y.length; i++) {   
  32.             yi[i] = Integer.valueOf(Character.toString(y[i]));   
  33.         }   
  34.   
  35.         return mult(xi, yi);   
  36.     }   
  37.   
  38.     private static String mult(int[] x, int[] y) {   
  39.   
  40.         int[] z = new int[x.length + y.length];   
  41.   
  42.         for (int i = 0; i < x.length; i++) {   
  43.             if(x[i] == 0) {   
  44.                 continue;   
  45.             }   
  46.             for (int j = 0; j < y.length; j++) {   
  47.                 if(y[j] == 0) {   
  48.                     continue;   
  49.                 }   
  50.   
  51.                 z[x.length - 1 - i + y.length - 1 - j] += x[i] * y[j];   
  52.                 z = carry(z, x.length - 1 - i + y.length - 1 - j);   
  53.             }   
  54.         }   
  55.   
  56.         StringBuffer sb = new StringBuffer();   
  57.            
  58.         for(int i : z) {   
  59.             sb.append(i);   
  60.         }   
  61.   
  62.         String result = sb.reverse().toString().replaceFirst("^0*""");   
  63.         if(result.length() == 0) {   
  64.             result = "0";   
  65.         }   
  66.   
  67.         return result;   
  68.     }   
  69.   
  70.     private static int[] carry(int[] z, int i) {   
  71.   
  72.         int temp = z[i];   
  73.         if(temp >= 10) {   
  74.             z[i] = temp % 10;   
  75.             z[i + 1] += temp / 10;   
  76.             z = carry(z, i + 1);   
  77.         }   
  78.   
  79.         return z;   
  80.     }   
  81.   
  82. }   
  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓