加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++大数加法

发布时间:2020-12-15 04:48:36 所属栏目:百科 来源:网络整理
导读: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(

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

{

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<

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

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

cout<

}

if(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

{

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<

if(bzhi==0)

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

cout<

}

return 0;

}

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


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


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


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


然后 for(a=0;a


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


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读