1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 大数加法(C语言)#includestdio.h #includestdlib.h #includestring.h char A[10005]; char B[10005]; int

大数加法(C语言)#includestdio.h #includestdlib.h #includestring.h char A[10005]; char B[10005]; int

时间:2020-11-24 02:54:33

相关推荐

大数加法(C语言)#includestdio.h #includestdlib.h #includestring.h  char A[10005]; char B[10005]; int

关于大数加法的C语言版本

可完美通过

#include<stdio.h>#include<stdlib.h>#include<string.h>char A[10005];char B[10005];int fa, fb;void swap(char *a, int i, int j){char t = a[i]-'0';a[i] = a[j]-'0';a[j] = t;}void add(char *a, char *b){int la = strlen(a),lb = strlen(b);int i,j,c=0,s,l;for(i=fa,j=la-1; i<=j; ++i,--j) swap(a,i,j);for(i=fb,j=lb-1; i<=j; ++i,--j) swap(b,i,j);for(i=fa; i<la||i<lb; ++i){ s = a[i] + b[i] + c;c = s/10;a[i] = s%10;}a[i] = c;l = c ? i : i-1;if(fa) printf("-");for(i=l; i>=fa; --i) printf("%d", a[i]);}int cmp(char *a, char *b){int i,j,la,lb;la = strlen(a);lb = strlen(b);if(la-fa>lb-fb)return 1;else if(la-fa<lb-fb)return 0;else{for(i=0; i<la&&a[i+fa]==b[i+fb]; ++i);return a[i+fa]>b[i+fb];}}void minus(char *a, char *b){char *t;int i,j,ft,la,lb,c,l,s;if(!cmp(a,b)){t=a; a = b; b = t;ft = fa; fa = fb; fb = ft;}la = strlen(a);lb = strlen(b);for(i=fa,j=la-1; i<=j; ++i,--j) swap(a,i,j);for(i=fb,j=lb-1; i<=j; ++i,--j) swap(b,i,j);c = 0;l = -1;for(i=0; i+fa<la; ++i){s = a[i+fa]-b[i+fb]-c>=0 ? 0 : 1;a[i+fa] = (10+a[i+fa]-b[i+fb]-c)%10;l = a[i+fa] ? i+fa : l;c = s;}if(l<0)printf("0");else{if(fa) printf("-");for(i=l; i>=fa; --i) printf("%d", a[i]);}}int main(){scanf("%s%s", A, B);fa = ('-'==A[0]);fb = ('-'==B[0]);if(fa^fb)minus(A,B);elseadd(A,B);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。