leetcode:43. Multiply Strings 大数相乘

题目描述:

Given two non-negative integers num1 and num2 represented as strings, return the product of num1and num2, also represented as a string.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"

Note:

  1. The length of both num1 and num2 is < 110.
  2. Both num1 and num2 contain only digits 0-9.
  3. Both num1 and num2 do not contain any leading zero, except the number 0 itself.
  4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

解题思路:

1.两数相乘后的结果一定一定小于两数的长度之和;

2.计算过程:从右向左,将数2中的每一位的数与数1相乘,最后将结果相加。

计算过程:

leetcode:43. Multiply Strings 大数相乘

可以得到,对于num[i] *num[j](数1中的第i位数字与数2中的第j位数字相乘的结果只会存放在第【i+j】和【i+j+1】这两位上)

同牛客网https://www.nowcoder.com/questionTerminal/0f0badf5f2204a6bb968b0955a82779e

实现:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String num1=sc.next().toString();
        String num2=sc.next().toString();
        String ret=fun(num1,num2);
        System.out.println(ret);
    }
    public static String fun(String num1, String num2) {
		int m=num1.length(),n=num2.length();
		int[] pos=new int[m+n];
		for (int i = m-1; i >=0; i--) {
			for (int j =n-1; j>=0; j--) {
				int mul=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
				int p1=i+j,p2=i+j+1;
				int sum=mul+pos[p2];
				pos[p1]+=sum/10;//高位
				pos[p2]=(sum)%10;//低位
			}
		}
		StringBuilder sb = new StringBuilder();
		for(int p:pos){
			if (!(sb.length() == 0 && p == 0)) {//筛掉首位为0的情况
                sb.append(p);
            }
		}
		return sb.length()==0?"0":sb.toString();
	    }
}