解题思路:
通过都题目可以知道用普通的加法是解决不了的,整数类型的最大到21亿,即使使用 long long最大也不过2^64,所以要对100位的数进行加减操作的话要用到高精度加法。
首先,通过字符串的方式把两个大数输入进去,建立两个vector容器存放这两个大数。
其次,建立一个新的容器存放相加后的结果,对两个大数的相应的数位上的数进行相加,还要定义一个int变量t来存放相加时的进位数(逢十进一),对两个数相加的和对10取余然后存放到新容器中,t再除10取整就是进位的数,再下一轮相加时进位数会加到里面(提高了变量t的复用性)。
最后,所有的数位上的数都相加完后判断最后一次相加时是否有进位数,如果有就再push 1到新容器里。
注意事项:
字符串数字转换为时整数数字时要减去'0'。
字符串转整数时是逆序存储的,先存低位再存高位,输出时要先输出高位再输出地位!!!
参考代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int>add(vector<int>&A,vector<int>&B){
vector<int>C;
int t=0;
for(int i=0;i<A.size()||i<B.size();i++){
if(i<A.size()) t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(1);
return C;
}
int main()
{
string a,b;
cin>>a>>b;
vector<int>A,B,C;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
C=add(A,B);
for(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);
return 0;
}
0.0分
1 人评分
数列 (C++代码)浏览:707 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:623 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:627 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:573 |
字符串问题 (C语言代码)浏览:1635 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:603 |
C语言训练-求PI* (C语言代码)浏览:638 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:732 |