C# · 12月 20, 2021

C++大数加法

emmm.写的有些繁琐…

我刚学,有些菜…

以后再简化些…

#include

#include

#include

using namespace std;

int main()

{ int a;

int i[1000]={0},I[1000]={0},sum[10000]={0};

char t[1000]={‘0’},T[1000]={‘0’};

cin>>t>>T;

int l=strlen(t);

int L=strlen(T);

int b=0,B=0;

if(l>=L)

{

for(a=l-1;a>=0;a–) //把**t[]**中的字符转换成 **i[]** 中的数字,并反转,

{

i[b]=t[a]-48;

b=b+1;

}

for(a=L-1;a>=0;a–)//**T[]**中字符转换成**i[]**中的数字,反转

{

I[B]=T[a]-48;

B=B+1;

}

int bzhi=0; //标志,最后一位是否需要 进位

for(a=0;a<l;a++)

{

sum[a]=sum[a]+i[a]+I[a]; //相加,sum[]=sum[]+i[]+I[]中右侧右sum[],

//是因为相加的时候可能有进位1

if(a==l-1&&sum[a]>9) //当加到最后一位,并且有进位

{

bzhi=1; //标志一下,

sum[a+1]=1;

sum[a]=sum[a]%10;

}

if(sum[a]>9) //如果大于9,则需要进位,

{

sum[a+1]=1; //下一位加一

sum[a]=sum[a]%10; //取余数,

}

}

if(bzhi==1) //如果标志了

for(a=l;a>=0;a–) //从a=l开始输出,

cout<<sum[a];

if(bzhi==0) //如果没有标志

for(a=l-1;a>=0;a–) //从a=l-1开始输出

cout<<sum[a];

}

if(l<L) //同理,参考上述,

//其实我写了上边的代码后,然后粘贴复制..改了改大小写…不过样例都对…

{

for(a=L-1;a>=0;a–)

{

I[B]=T[a]-48;

B=B+1;

}

for(a=l-1;a>=0;a–)

{

i[b]=t[a]-48;

b=b+1;

}

int bzhi=0;

for(a=0;a<L;a++)

{

sum[a]=sum[a]+i[a]+I[a];

if(a==L-1&&sum[a]>9)

{

bzhi=1;

sum[a+1]=1;

sum[a]=sum[a]%10;

}

if(sum[a]>9)

{

sum[a+1]=1;

sum[a]=sum[a]%10;

}

}

if(bzhi==1)

for(a=L;a>=0;a–)

cout<<sum[a];

if(bzhi==0)

for(a=L-1;a>=0;a–)

cout<<sum[a];

}

return 0;

}

思路大概就是先通过字符数组存储大数,

然后用 int数组来一个一个的转换成整型,并存储,并反转一下,

平常的加法也是从右开始向左加,个位->十位->百位->…

如果不反转,就成了 …百位->十位->个位。

然后 for(a=0;a<l;a++) 一个一个位的相加,如果有进位就进一

如果最后的一位没有进位,就 for(a=l-1;a>=0;a–) 反转输出,

如果最后的一位有进位,就for(a=l;a>=0;a–) 反转输出,