大数加法与减法
发布时间:2020-12-14 02:17:52 所属栏目:大数据 来源:网络整理
导读://这应该就对了。。 #includestdio.h#includestring.h#define MAX(a,b) (ab?a:b)char a[10010];char aa[10010];char b[10010];char bb[10010];int sum[100010];//存放加法的和 int a1[10010];//存放字符串a[],中所代表的数字 int b1[10010];//存放字符串b[],
//这应该就对了。。 #include<stdio.h> #include<string.h> #define MAX(a,b) (a>b?a:b) char a[10010]; char aa[10010]; char b[10010]; char bb[10010]; int sum[100010];//存放加法的和 int a1[10010];//存放字符串a[],中所代表的数字 int b1[10010];//存放字符串b[],中所代表的数字 int main() { int i,j,l,l1,l2; char c; while(scanf("%s",a)!=EOF) { memset(a1,sizeof(a1)); memset(b1,sizeof(b1)); memset(sum,sizeof(sum)); l1=strlen(a); j=0; for(i=l1-1;i>=0;i--) aa[j++]=a[i]; getchar(); scanf("%c",&c); scanf("%s",b); l2=strlen(b); j=0; for(i=l2-1;i>=0;i--) bb[j++]=b[i]; l=MAX(l1,l2); if(c=='+')// 当是加号时,执行加法。 { if(l1>=l2) { j=0; for(i=0;i<l2;i++) { sum[j]+=((aa[i]-'0')+(bb[i]-'0')); if(sum[j]>=10) { sum[j+1]+=sum[j]/10; sum[j]%=10; } j++; } for(i=l2;i<l1;i++) sum[j++]=aa[i]-'0'; } else { j=0; for(i=0;i<l1;i++) { sum[j]+=((aa[i]-'0')+(bb[i]-'0')); if(sum[j]>=10) { sum[j+1]+=sum[j]/10; sum[j]%=10; } j++; } for(i=l1;i<l2;i++) sum[j++]=bb[i]-'0'; } if(!sum[l]) l--; for(i=l;i>=0;i--) printf("%d",sum[i]); printf("n"); } else//否则执行减法。 { for(i=0;i<l1;i++) a1[i]=a[l1-i-1]-'0'; for(i=0;i<l2;i++) b1[i]=b[l2-i-1]-'0'; if(l1>l2||(l1==l2&&strcmp(a,b)>0)) { for(i=0;i<l1;i++) { if(a1[i]<b1[i]) { a1[i+1]--; a1[i]+=10; } a1[i]=a1[i]-b1[i]; } for(i=l-1;i>=0;i--) printf("%d",a1[i]); printf("n"); } else { printf("-"); for(i=0;i<l2;i++) { if(b1[i]<a1[i]) { b1[i+1]--; b1[i]+=10; } b1[i]=b1[i]-a1[i]; } for(i=l-1;i>=0;i--) printf("%d",b1[i]); printf("n"); } } } return 0; } /* 测试数据 样例输入 1、 12345 + 12345 2、 12345 + 35 3、 35 + 12345 4、 12345 - 2345 5、 2345 - 12345 6、 12 - 123 7、 123- 12 样例输出 1、 24690 2、 12380 3、 12380 4、 10000 5、 -10000 6、 -111 7、 111 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |