//模板:
#include<cstdio>
#include<cstring>
using namespace std;
struct sd {
int lend,d[300]; //长度,存数字的数组
sd(){memset(d,0,sizeof(d));}//初始化操作,清零
//引入一个数与结构体内的数相加
//const表示常数,&x表示传入地址
//如果写成sd x传入这个数就太大了,而且容易被改变
sd operator + (const sd &x) const {
sd c;//求和器
int t=lend>x.lend?lend:x.lend; //取两个数中最长的
c.d[0]=0;
for (int i=0;i<t;i++)
{
c.d[i]=c.d[i]+d[i]+x.d[i];
c.d[i+1]=c.d[i]/10;
//如果进位了,(因为是倒序存入),后一个数初值先赋1,以后便在1的基础上累加
c.d[i]=c.d[i] % 10;//当前位的值
}
c.lend=t;
if (c.d[t]>0) c.lend++;//如果最高位进位了,长度加1
return c;
}
};
// < set map vector
sd readit()
{
sd c;char st[300];
scanf("%s",st);int j=0;
for (int i=strlen(st)-1;i>=0;i--)//倒序读入
{
c.d[j]=st[i]-48;j++; //记得边倒序读入边转化字符为数字
}
c.lend=j; //记录长度
return c;
}
int main()
{
sd a,b,c;
a=readit();b=readit();
c=a+b;
for (int i=c.lend-1;i>=0;i--)
printf("%d",c.d[i]);
printf("\n");
return 0;
}
核心:
结构体,运算符重载,倒序存入