美文网首页
大数相乘

大数相乘

作者: Haward_ | 来源:发表于2019-10-17 10:58 被阅读0次
    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;
        }
      }
    }
    
    
    
    
    

    相关文章

      网友评论

          本文标题:大数相乘

          本文链接:https://www.haomeiwen.com/subject/emrwnqtx.html