耿祥瑞


私信TA

用户名:dotcpp0692230

访问量:924

签 名:

等  级
排  名 561
经  验 4357
参赛次数 0
文章发表 12
年  龄 0
在职情况 学生
学  校 齐鲁理工学院
专  业 数据科学与大数据技术

  自我简介:

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

  评论区

  • «
  • »