解题思路:
通过都题目可以知道用普通的加法是解决不了的,整数类型的最大到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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论