GOJ1002大数相加
发布时间:2020-12-14 02:39:50 所属栏目:大数据 来源:网络整理
导读:#includestdio.h#includestring.h//大数相加总的来说就是模拟手算,例如12345和352115,手算的过程就是从最小位开始逢十进一,因此大数都倒置,然后再来算较方便int main(){ int t,num=1,len1,len2,i,jin,j; char a[410],b[410],c[410],d[410],e[410]; scanf
#include<stdio.h> #include<string.h> //大数相加总的来说就是模拟手算,例如12345和352115,手算的过程就是从最小位开始逢十进一,因此大数都倒置,然后再来算较方便 int main() { int t,num=1,len1,len2,i,jin,j; char a[410],b[410],c[410],d[410],e[410]; scanf("%d",&t); getchar(); while(t--) { memset(d,410*sizeof(char));//memset函数可将一个数组中的全部元素变为0或者-1,例如int a[10],memset(a,sizeof(a)或者memset(a,sizeof(int)*10); memset(e,410*sizeof(char)); scanf("%s%s",a,b); getchar(); len1=strlen(a); len2=strlen(b); for(i=len1-1,j=0;i>=0;i--,j++) d[j]=a[i]-48; //倒置大数a[],结果存放在d[]; for(i=len2-1,j++) e[j]=b[i]-48; //倒置大数b[],结果存放在e[]; jin=0; //jin表示有没有进位,0表示没有,1表示有 for(i=0;i<len1||i<len2;i++) //模拟手算的过程 { c[i]=d[i]+e[i]+jin; jin=c[i]>9?1:0; //jin表示有没有进位,0表示没有,1表示有 c[i]=c[i]%10+48; //取余 } if(jin==1)c[i]=49; //最后一位数看是否有没有进位,有进位的话最大位就是1; else i--; printf("Case %d:n",num++); printf("%s + %s = ",b); while(i>=0) //反向输出结果 { printf("%c",c[i]); i--; } printf("n"); if(t!=0)printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |