题目
分析
模拟竖式乘法,计算出被乘数每位与乘数的乘积值,然后对这些值进行求和。
代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// 保存被乘数每位与乘数乘积的结果
StringBuffer buffer = new StringBuffer();
//保存求和结果
StringBuffer res = new StringBuffer();
//遍历被乘数的每一个
for(int i = s.length()-1; i >= 0; i--){
//进位
int carry = 0;
//清空buffer
buffer.delete(0,buffer.length());
//追加0,在竖式乘法中值是错位相加,个位补0个0,十位补一个0,百位补两个0,依次类推
for(int m = i; m < s.length()-1; m++) {
buffer.append('0');
}
//遍历乘数
for(int j = t.length()-1; j >= 0; j--) {
int num = (s.charAt(i)-'0') * (t.charAt(j)-'0') + carry;
carry = num / 10;
buffer.append(num % 10);
}
if(carry != 0) {
buffer.append(carry);
}
//求和
int j = 0;
carry = 0;
String temp = "";
while(j < buffer.length() || j < res.length()) {
int num1 = j < buffer.length() ? buffer.charAt(j) - '0':0;
int num2 = j < res.length() ? res.charAt(j) - '0':0;
int num = num1 + num2 + carry;
temp = temp + num % 10;
carry = num / 10;
j++;
}
res.replace(0,res.length(),temp);
if(carry != 0) {
res.append(carry);
}
}
return res.reverse().toString();
}
}