//模板:
#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;
}
核心:
結構體,運算符重載,倒序存入