题目:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例1
输入:num1="2",num2="3"
输出:“6”
示例2
输入:num1="123",num2="456"
输出:“56088”
说明:
- num1 和 num2 的长度小于110。
- num1 和 num2 只包含数字 0-9。
- num1 和 num2 均不以零开头,除非是数字 0 本身。
- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
题解
这道题就模拟我们平时做乘法的步骤就可以了。我们平时做乘法的方法的学名叫做:竖式运算(我也是刚知道这个名字)。下图就是我们所说的竖式运算方法:
- 为了循环方便,低位放在左边,高位放在右边。即:num1 =new StringBuilder(num1).reverse().toString();
- 两个数相乘,所乘后的数字位数最多为两数位数之和,例如:两个两位数相乘,结果最高为4位数。则需要一个长度为两数位数之和的数组,把每一位的临时结果存起来。
- 临时结果求法:例如,12553,个位数为53=15;十位数为55+23=31;百位数为25+13=13;千位数:15=5;每一位都放在数组对应位置上,对应的代码为: d[i+j]+=ab;
- 然后再分离个位,十位;int digit = d[i]%10;int carry = d[i]/10;d[i+1]+=carry;先把余位数字digit插入StringBuilder,sb.insert(0,digit);每次都插到第一位,因为最低位是个位,后面的是高位。
- 最后要注意把前面的0删掉。sb.deleteCharAt(0);
代码
1 | public class leetcode43 { |