大数相乘
2016-03-11 15:33
274 查看
编写任意位数的大数相乘的程序。
经典的方法是:
1)将字符串转为数字并反转(string到vector<int>)
2)逐位相乘,结果放到resultNum中(vecotr<int> resultNum(a.size()+b.size(),0))
3)清除resultNum中多余的0,处理进位
4)将计算结果转为字符串并反转
经典的方法是:
1)将字符串转为数字并反转(string到vector<int>)
2)逐位相乘,结果放到resultNum中(vecotr<int> resultNum(a.size()+b.size(),0))
3)清除resultNum中多余的0,处理进位
4)将计算结果转为字符串并反转
#include<iostream> #include <vector> #include <string> using namespace std; struct BigCheng{ vector<int> a; vector<int> b; string resultStr; }; void StrToIntReverse(string data1, string data2, BigCheng &bigCheng) { for (int i = data1.size() - 1; i >= 0; --i) bigCheng.a.push_back(data1[i] - '0'); for (int i = data2.size() - 1; i >= 0; --i) bigCheng.b.push_back(data2[i] - '0'); } void DoCheng(BigCheng &bigCheng, vector<int> &resultNum) { /*逐位相乘*/ for (unsigned int i = 0; i < bigCheng.a.size(); i++) for (unsigned int j = 0; j < bigCheng.b.size(); j++) resultNum[i + j] += bigCheng.a[i] * bigCheng.b[j]; /*处理多余的0*/ for (int i = resultNum.size() - 1; i >= 0; i--) { if (resultNum[i] != 0) break; else resultNum.pop_back(); } /*处理进位*/ int c = 0; for (unsigned int i = 0; i < resultNum.size(); i++) { resultNum[i] += c; c = resultNum[i] / 10; resultNum[i] = resultNum[i] % 10; } if (c != 0) resultNum.push_back(c); } void IntToStrReverse(BigCheng &bigCheng, vector<int> &resultNum) { for (int i = resultNum.size() - 1; i >= 0; i--) bigCheng.resultStr.push_back(resultNum[i] + '0'); } int main() { while (1) { cout << "请输入两个大数: " << endl; string a, b; cin >> a >> b; vector<int> resultNum(a.size() + b.size(), 0); BigCheng re; StrToIntReverse(a, b, re); DoCheng(re, resultNum); IntToStrReverse(re, resultNum); cout << re.resultStr << endl; } return 0; }
相关文章推荐
- DEBUG:mysql数据库绿色版设置初始密码
- VCL 中文man page(1)
- 单例模式
- 为你的PHP程序选择合适的密码库(初稿)
- 开发中碰到的问题:java.lang.NoClassDefFoundError: com.baidu.location.LocationClient的解决办法
- 子集生成
- oracle数据泵impdp远程导入,无需生成dumpfile文件
- C++程序员面试宝典——预处理、counst与sizeof
- Android 动画播放时退出或隐藏界面时报错
- 对安卓的项目进行打包过程
- 快速安装LAMP(Ubuntu12.04+Apache2+Mysql+PHP5.5)+安装phpmyadmin
- socket通信简介
- 学习手机游戏开发的两个方向 Cocos2d-x 和 Unity 3D/2D,哪个前景更好?
- mysql数据库事件
- IOS开发 Missing submodule 'XXXX' 警告
- 最少拦截系统------LCS--------动态规划
- Android InputStream转Bitmap
- 为你的PHP程序选择合适的密码库(初稿)
- 学Cocos2d-x,让移动游戏开发更简单
- iOS的直播怎么做