题解 | #大数乘法#
大数乘法
https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
#include <algorithm>
#include <vector>
class Solution {
public:
string solve(string s, string t) {
//首先逆序存储数字
int slen = s.size();
int tlen = t.size();
if(s == "0" || t == "0") return "0";
//int m = slen > tlen ? slen : tlen;
vector<int> nums1(slen, 0);
vector<int> nums2(tlen, 0);
for(int i = 0; i < slen; i ++)nums1[slen - 1 - i] = (s[i] - '0');
for(int i = 0; i < tlen; i++)nums2[tlen - 1 - i] = (t[i] - '0');
for(int i = 0; i < tlen; i++) cout<<nums2[i];
cout<<endl;
vector<int> ans(slen + tlen, 0);
for(int i = 0; i < slen; i ++){
for(int j = 0; j < tlen; j++){
ans[i + j] += (nums1[i] * nums2[j]);
}
}
for(int i = 0; i < slen + tlen; i++){
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
string res;
for(int i = 0; i < slen + tlen; i++) res += (ans[i] + '0');
reverse(res.begin(), res.end());
int k = 0;
while(res[k] == '0') k ++;
return res.substr(k, res.size()); //这里可以知道reverse这个函数是整个逆转,所以ans中后面为零的元素全在res的字符串前方
}
};

查看8道真题和解析
