思路

由于大数计算会超过long long的范围,所以利用数组来保存每一位的数字。首先利用字符串接收两个数字,在分别把两个数字放到数组里面,第一个元素放数字长度,后面的从低位到高位放置数字。找到两个数字最大的长度,将两个数字相加。首先相加之后进位给更高位低位对10取余得到个位数字。由于可能出现向更高位进位的情况,所以数字长度+1。去掉最高位可能的零,依次输出数字。

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string str1,str2;
    int a[250],b[250],len;
    int i;
    memset(a,0,sizeof(a));//将数组元素初始化为零
    memset(b,0,sizeof(b));
    cin>>str1>>str2;//输入两个字符串 
    a[0] = str1.length();//获取第一个字符串的长度 
    for(int i=1;i<=a[0];i++){
        a[i] = str1[a[0]-i]-'0';//把第一个字符串转换为整数,存放在数组a中 
    }
    b[0] = str2.length();
    for(int i=1;i<=b[0];i++){
        b[i] = str2[b[0]-i]-'0';
    }
    len = a[0]>b[0]?a[0]:b[0];//获取字符串最大的长度
    for(int i=1;i<=len;i++){
        a[i]+=b[i];
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    len++;
    while((a[len]==0)&&(len>1))len--;//去掉最高位的零
    for(int i = len;i>=1;i--){
        cout<<a[i];
    }
    return 0;
}

一只小菜鸡