大数相乘
来源:互联网 发布:类似photosynth的软件 编辑:程序博客网 时间:2024/06/05 13:24
编写任意位数的大数相乘的程序。
经典的方法是:
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;}
0 0
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- C/C++标准输入输出与文件输入输出
- [Android Studio] Android Studio常用快捷键
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- GPUImage相机组合滤镜
- spring mvc 提交表单实现文件上传服务器
- 大数相乘
- Statistics(统计varnish相关数据)
- iosWKWebView截图
- DownLoadManager的使用
- 电气自动化专业课程控制教育现状思考
- Maven搭建SpringMVC+Mybatis项目详解
- java(19)--数据库事务隔离级别
- iOS面试题
- java自学(第一周)