大数相乘

2019-10-17  本文已影响0人  Haward_
import java.util.Scanner;
/***
 *  大数相乘
 */
public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s1 = sc.next();
    String s2 = sc.next();
    int[] arr1 = new int[s1.length()];
    int[] arr2 = new int[s2.length()];
    for(int i=0;i<arr1.length;i++) {
      arr1[i] = s1.charAt(i)-'0';
    }
    for(int i=0;i<arr2.length;i++) {
      arr2[i] = s2.charAt(i)-'0';
    }
    System.out.println(bigMul(arr1,arr2));
  }

  private static String bigMul(int[] arr1,int[] arr2) {
    // 索引i+j的最大值为arr1.length-1 + arr2.length-1 ;所以定义长度长度如下:
    int[] res = new int[arr1.length+arr2.length-1];
    /***
     * 假设是123*45:
     * res[0] 表示100*40(最高位)(两个数从左到右算起,第0位,即i+j=0+0)
     * res[1] 表示i+j=0+1或者1+0的结果,对应100*5+20*40的结果(次高位)
     * 。。。
     */
    for(int i=0;i<arr1.length;i++) {
      for(int j=0;j<arr2.length;j++) {
        res[i+j]+=arr1[i]*arr2[j];
      }
    }
    // 从右往左算,即最低位到最高位进位
    int bit = 0;
    for(int i=res.length-1;i>0;i--) {
      int temp = res[i];
      res[i]=(temp+bit)%10;
      bit = (temp+bit)/10;
    }
    String str = "";
    for(int i=0;i<res.length;i++) {
      str += res[i];
    }
    if(bit!=0) {
      return bit+str;
    }else {
      return str;
    }
  }
}




上一篇 下一篇

猜你喜欢

热点阅读