高精度加法
Posted zhaohaofei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度加法相关的知识,希望对你有一定的参考价值。
给定两个正整数,计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤1000001≤整数长度≤100000
输入样例:
12
23
输出样例:
35
思路:因为数据量很大,无法用整数数据类型来存储这两个数,所以采用 字符串+vector容器 来存储两个整数以及结果。
1 #include<iostream> 2 3 #include<vector> 4 5 #include<string> 6 7 using namespace std; 8 9 vector<int> add(vector<int> &A,vector<int> &B){ 10 11 int t = 0; //存储两个整数每个位上的数字相加的和以及进位。 12 13 vector<int> C; 14 15 for(int i = 0 ;i < A.size()||i < B.size(); i++){ 16 17 if(i < A.size()) t += A[i]; 18 if(i < B.size()) t += B[i]; 19 C.push_back( t % 10); //存储两个整数第i + 1位数相加的结果的个位数。 20 t /= 10; //求进位 21 } 22 23 if(t) C.push_back(t); //如果每一位数都计算完了但是有进位的情况,则要考虑把这个进位也加到容器C里面。 24 25 return C; 26 27 } 28 29 int main(){ 30 31 string a,b; 32 33 cin >> a >> b; 34 35 vector<int > A,B; 36 37 for(int i = a.size()-1;i >= 0;i--) A.push_back(a[i]-‘0‘); //vector容器从低位到高位依次存储整数。 38 for(int i = b.size()-1;i >= 0;i--) B.push_back(b[i]-‘0‘); 39 40 auto C = add(A,B); //auto是自动按照add()函数的返回结果来定义变量C。(如:add()函数返回类型为vector<int> , 则此处C的类型为vector<int>) 41 42 for(int i = C.size() - 1;i >= 0;i--) printf("%d",C[i]); 43 44 return 0; 45 46 }
以上是关于高精度加法的主要内容,如果未能解决你的问题,请参考以下文章