题解 | #大数乘法#
大数乘法
https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
int s_arr[101000];
int t_arr[101000];
int ans[1010000];//不知为啥如果将数组定义在函数内部,且动态创建的时候,就会出错,运行结果还不知道是啥
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
if (s == "0" || t == "0")
return "0";
int slen = s.size();
int tlen = t.size();
//将两个字符串转化为整形数组
for (int i = 0; i < slen; i++) {
s_arr[i] = s[slen - 1 - i] - '0';
}
for (int j = 0; j < tlen; j++) {
t_arr[j] = t[tlen - 1 - j] - '0';
}
int k = slen + tlen;
cout << k << endl;
//进行模拟两个高精度乘法
for (int i = 0; i < slen; i++) {
for (int j = 0; j < tlen; j++) {
ans[i + j] += s_arr[i] * t_arr[j];
}
}
for (int i = 0; i <= k; i++) {
cout << ans[i];
}
cout << endl;
//进行进位处理
for (int i = 0; i <= k ; i++ ) {
if (ans[i] >= 10) {
ans[i + 1] += ans[i] / 10;
ans[i] = ans[i] % 10;
}
}
//对高位的零进行处理
while (ans[k] == 0) {
k--;
}
//逆序输出处理
string ans2 = "";
for (; k >= 0; k--)
ans2 = ans2 + char(ans[k] + '0');
return ans2;
}
};