点击查看代码
#include <iostream>
#include <vector> //含有size方法
using namespace std;
//C = A+B
vector<int> add(vector<int> &A, vector<int> &B){
vector<int> C;
int t = 0; //t表示进位
for(int i = 0; i < A.size() || i < B.size(); i++){
if(i < A.size()) t += A[i]; //加上加数A上的某位
if(i < B.size()) t += B[i]; //加上加数B上的某位
//此时的t表示: 上次运算产生的进位 + A[i] + B[i]
C.push_back(t % 10); //本次运算的结果 模10后 放入数组C中
t /= 10; //表示本次运算产生的进位 比10大则t=1 比10小则t=0 (逢十进一)
}
if(t) C.push_back(1); //最高位产生进位时 结果C中新增一个最高位 为1
return C;
}
int main(){
string a, b; //使用字符串的形式输入
cin >> a >> b; //a = "123456"
vector<int> A, B; //将输入的字符串转化为数字存到数组中 先存放个位 最后存放最高位
for(int i = a.size()-1; i >= 0; i--) A.push_back(a[i] - '0'); //A = [6, 5, 4, 3, 2, 1]
for(int i = b.size()-1; i >= 0; i--) B.push_back(b[i] - '0');
auto C = add(A, B);
for(int i = C.size()-1; i >= 0; i--) printf("%d", C[i]); //先输出最高位 最后输出个位
return 0;
}
/*
四种情况:
A+B
两个大整数相加
A和B的位数大概是10的6次方
A-B
两个大整数相减
A和B的位数大概是10的6次方
A*a
一个大整数乘上一个小整数
A的位数 <= 10的6次方
a的数值 <= 10的9次方
A/b
求商和余数是多少
两个问题:
一、
大整数的存储 ---> 用数组
每一位存到一个数组里面
存时
数组下标0 存个位
数组下标1 存十位
数组下标2 存百位
........以此类推
低位存到数组中第一个位置
因为两个整数相加可能会进位
在数组末尾添加数字较容易
二、
运算 模拟人工加法的过程
A3 A2 A1 A0
+ B2 B1 B0
--------------------------
C3 C2 C1 C0
对于每一位: Ai + Bi + t
t 表示上一位的进位:
无进位时t=0 有进位时t=1
*/
- 用数组逐位存放整数
- 个位存放到数组中的第一个位置
- 最高位存放到数组中的最后一个位置
- 运算过程中,模10后放入结果数组,注意进位为1或0
原文地址:http://www.cnblogs.com/starryWJ/p/16887134.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性