大数相乘算法
2015-11-19 14:29
323 查看
不能计算负数,小数。 用string对象存储数值,然后逆序排列,从左向右相乘进位。 [参考1](http://www.cnblogs.com/heyonggang/p/3599857.html) [参考2](http://www.cnblogs.com/life91/p/3389890.html)
#include<iostream> #include<string> void fan(std::string & str); std::string multiply(std::string & v1, std::string & v2); int main() { using namespace std; string v1; string v2; string mul; cout << "Enter the first number: "; cin >> v1; cout << "Enter the next number: "; cin >> v2; mul = multiply(v1, v2); cout << v1 << " x " << v2 << " = " << mul; return 0; } void fan(std::string & str) { char temp = '0'; int start = 0; int end = str.size() - 1; while (start < end) { temp = str[start]; str[start++] = str[end]; str[end--] = temp; } } std::string multiply(std::string & v1, std::string & v2) { fan(v1); fan(v2); std::string temp(v1.size() + v2.size() + 1, '0'); unsigned int t = 0; for (int i = 0; i < v1.size(); i++) { unsigned int j; for (j = 0; j < v2.size(); j++) { t += temp[i + j] - '0' + (v1[i] - '0' )* (v2[j] - '0'); temp[i + j] = (t % 10) + '0'; t = t / 10; } while (t) { temp[i + j++] += t % 10; t = t / 10; } } for (int i = temp.size() - 1; i >= 0; i--) { if (temp[i] != '0') break; else temp.pop_back(); } fan(temp); fan(v1); fan(v2); return temp; }
相关文章推荐
- OutputCache各参数的说明
- webrtc 丢包反馈之 rtcp goog-remb
- 关于Oracle将小于1的数字to_char后丢掉0的解决办法
- stacktach和ceilometer
- Kibana User Guide [4.2] » Kibana Plugins
- tasklet与workqueue的区别及底层实现区别
- Callable,Runnable比较及用法
- android自定义状态栏的颜色
- 架构师知识体系(1)--WEB架构师成长之路
- spring-data-jpa 问题汇总
- [No000053]我25岁了,是应该继续挣钱,还是选择自己的爱好?--正好庆祝自己25岁生日
- spring-data-jpa 问题汇总
- RT Thread 在STM32f10x 平台上的移植
- Afinal 混淆打包报错的解决方法
- Gamma原理及快速实现算法(C/C++)(转)
- nyoj 116 士兵杀敌(二) 【线段树】区间求和&&节点更新
- Linux 总结用户和用户组管理
- MySQL语法大全
- OpenStack Neutron网络里使用VLAN, VXLAN和GRE要注意什么
- maven常用插件总结