目录
字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:输入: num1 = "123", num2 = "456"
输出: "56088"
提示:
1 <= num1.length, num2.length <= 200
num1 和 num2 只能由数字组成。
num1 和 num2 都不包含任何前导零,除了数字0本身。
题解:
竖式乘法计算
核心代码:
for(int i=l1;i>=0;i--){ //被乘数 for(int j=l2;j>=0;j--){ //存储每位乘积 int temp = (num1.charAt(i)-'0') * (num2.charAt(j)-'0'); //①判断是否有进位②加上上一位在此位置的乘积 temp+=res[i+j+1]; //存储进位数 res[i+j]+=temp/10; //存储该位结果 res[i+j+1]=temp%10; } }
代码:
class Solution { public String multiply(String num1, String num2) { //计算长度 int l1=num1.length()-1; int l2=num2.length()-1; //存储结果 int res[]=new int[l1+l2+2]; //竖式乘法 for(int i=l1;i>=0;i--){ //被乘数 for(int j=l2;j>=0;j--){ //存储每位乘积 int temp = (num1.charAt(i)-'0') * (num2.charAt(j)-'0'); //①判断是否有进位②加上上一位在此位置的乘积 temp+=res[i+j+1]; //存储进位数 res[i+j]+=temp/10; //存储该位结果 res[i+j+1]=temp%10; } } StringBuilder sb=new StringBuilder(); //去除数组中的前导零 int i=0; while(i<res.length-1&&res[i]==0){ i++; } for(;i<res.length;i++){ sb.append(res[i]); } return sb.toString(); } }