? ? ? ? ? ? ? ? ? ? ?大整数乘法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?By qianghaohao(Xqiang)
? ? ? ?在数字很大的时候进行运算时会出现溢出现象,所以可以用大数运算算法来解决
这一问题。算法描述如下:
? ? ?? 
? ? ? ? 注意:上面说的跳过0的意思是跳过第一个0,不是中间的。因为在结构中第一个位的0是多余的.
? ? ? ? 实现代码如下:
? ??
// 大整数乘法
string BigIntMul(const string &opt1,const string &opt2) {
int opt1_len = opt1.size();
int opt2_len = opt2.size();
vector<int> re(opt1_len + opt2_len,0);
// 边乘边累加
for (int i = 0; i < opt1_len; i++) {
for (int j = 0; j < opt2_len; j++) {
re[i + j + 1] += (opt1[i] - '0') * (opt2[j] - '0');
}
}
// 进位
for (int i = opt1_len + opt2_len - 1; i > 0; i--) {
if (re[i] >= 10) {
re[i - 1] += re[i] / 10;
re[i] %= 10;
}
}
if (re[0] == 0) { //删除开头为0
re.erase(re.begin());
}
string re_str(re.size(),' '); //最终结果
for (int i = 0; i < re.size(); i++) {
re_str[i] = re[i] + '0';
}
return re_str;
}
?参考文献:
? ? ? ? ??http://www.voidcn.com/article/p-yodufzkc-ym.html
? ? ? ? ? 只是对此文的代码做了改进,算法是一样的.
(编辑:成都站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|