大数加法
发布时间:2020-12-14 03:35:26 所属栏目:大数据 来源:网络整理
导读:?? ? 描述 求两个非负整数( 1000 位以内)的和。 输入 两个非负整数( 1000 位以内),以空格分隔。 输出 两个非负整数的和。 样例输入 222222222211?222222222222 样例输出 333333333333 提示 ? 题目来源 GUOJ //1011 还有很多可改进的地方#include "stdio
??
?
描述
求两个非负整数(1000位以内)的和。
输入
两个非负整数(1000位以内),以空格分隔。
输出
两个非负整数的和。
样例输入 222222222211?222222222222 样例输出 333333333333 提示
?
题目来源 GUOJ //1011 还有很多可改进的地方 #include "stdio.h" #include "string.h" int main() { char Na[1002],Nb[1002];//以防进位 unsigned Ia[1002]={0},Ib[1002]={0};//将字符转化为数字存储处理 倒过来 刚好防止进位带的移位 然后逆序输出即是答案 int La,Lb; int i; int k=0;//进位标志符 scanf("%s%s",Na,Nb); La=strlen(Na); Lb=strlen(Nb); for(i=0;i<La;++i) { Ia[La-i-1]=Na[i]-'0'; } for(i=0;i<Lb;++i) { Ib[Lb-i-1]=Nb[i]-'0'; } if(La<=Lb) { for(i=0;i<La;++i) { Ib[i]+=Ia[i]; } for(i=0;i<Lb;++i) { if(Ib[i]>=10) { if(Lb-1==i) { Ib[i]=Ib[i]%10; Ib[i+1]=1; ++k; } else { Ib[i]=Ib[i]%10; Ib[i+1]+=1; } } } if(1==k) { for(i=Lb;i>=0;--i) { printf("%d",Ib[i]); } } else { for(i=Lb-1;i>=0;--i) { printf("%d",Ib[i]); } } } else { for(i=0;i<Lb;++i) { Ia[i]+=Ib[i]; } for(i=0;i<La;++i) { if(Ia[i]>=10) { if(La-1==i) { Ia[i]=Ia[i]%10; Ia[i+1]=1; ++k; } else { Ia[i]=Ia[i]%10; Ia[i+1]+=1; } } } if(1==k) { for(i=La;i>=0;--i) { printf("%d",Ia[i]); } } else { for(i=La-1;i>=0;--i) { printf("%d",Ia[i]); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |