leetcode:43. Multiply Strings 大数相乘
题目描述:
Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and 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:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
解题思路:
1.两数相乘后的结果一定一定小于两数的长度之和;
2.计算过程:从右向左,将数2中的每一位的数与数1相乘,最后将结果相加。
计算过程:
可以得到,对于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();
}
}