大整数乘法
大整数乘法
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(), '\0'); //最终结果 for (int i = 0; i < re.size(); i++) { re_str[i] = re[i] + '0'; } return re_str; }
参考文献:
http://blog.csdn.net/samoyedsun/article/details/51485255
只是对此文的代码做了改进,算法是一样的.
posted on 2016-05-24 07:47 CodeNutter 阅读(227) 评论(0) 编辑 收藏 举报