题解 | #大数乘法#
大数乘法
http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
最简单的做法:先不进位,把各个位的数算出来,同一位置累加,最后再做进位操作。
以6789 x 8976为例:
class Solution {
public:
void str2num(string& s, vector<int>& num){
for(char c: s){
num.push_back(c - '0');
}
reverse(num.begin(), num.end());
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
string ret;
if(atoi(s.c_str()) == 0 or atoi(t.c_str()) == 0){
return "0";
}
vector<int> s_num, t_num;
str2num(s, s_num);
str2num(t, t_num);
int n1 = s.size();
int n2 = t.size();
vector<int> res(n1+n2);
for(int i = 0; i < n1; i++){
for(int j = 0; j < n2; j++){
res[i + j] += s_num[i] * t_num[j];
}
}
int carry = 0;
for(int i = 0; i < res.size(); i++){
res[i] = res[i] + carry;
carry = res[i] / 10;
res[i] = res[i] % 10;
}
if(res.back() == 0){
res.erase(res.end()-1);
}
reverse(res.begin(), res.end());
for(auto num: res){
ret.append(to_string(num));
}
return ret;
}
};