[VIJOS-1040] 高精度乘法

来源:互联网 发布:张国荣爱情知乎 编辑:程序博客网 时间:2024/05/22 14:26

注意数组大小。

/* * VIJOS-1040 高精度乘法 * mike-w * 2012-10-21 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXL 10000#define BASE 10000#define WIDTH 4int a[MAXL], b[MAXL], c[MAXL];char buf[MAXL];int read(int *s){scanf("%s", buf);int len=strlen(buf);int w=1, sum=0, p=MAXL-1;int i;for(i=len-1; i>=0; i--){sum+=w*(buf[i]-'0');w*=10;if(w==BASE){s[p--]=sum;sum=0;w=1;}}if(sum)s[p--]=sum;return 0;}int disp(int *s){int i;for(i=0; i<MAXL-1; i++)if(s[i])break;printf("%d", s[i++]);for(; i<MAXL; i++)printf("%0*d", WIDTH, s[i]);return 0;}int multi(int *s1, int *s2, int *ans){int i, j, c;for(i=1, c=0; i<=MAXL; i++)for(j=1; j<=MAXL; j++){ans[MAXL+1-i-j]+=s1[MAXL-i]*s2[MAXL-j]+c;c=ans[MAXL+1-i-j]/BASE;if(c)ans[MAXL+1-i-j]%=BASE;}return 0;}int main(void){read(a);read(b);multi(a, b, c);disp(c);putchar('\n');return 0;}



原创粉丝点击