超级大 正整数 乘法
发布时间:2020-12-14 03:31:16 所属栏目:大数据 来源:网络整理
导读:/* Two big integer multiplied eg.22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
/* Two big integer multiplied eg. 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 * 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211 111 = 1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234 320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321 */ #include<stdio.h> #include<string.h> char s1[10000]; // num1 char s2[10000]; // num2 int a1[10000]; // i of s1 * s2 int a2[10000]; // last ans int ans[10000]; // current ans void mulBigData(char *s1,char *s2){ int i1,i2; // for s1,s2 traversal int len1,len2; // length of s1,s2 int la1,la2,lan; // length of a1,a2,ans int ai,ani; // for a1,ans traversal // eg. 123 * 12 -> 12 * 123 // make s1 is short and s2 is long len1 = strlen(s1); len2 = strlen(s2); if(len1 > len2){ char *tmps = s1; s1 = s2; s2 = tmps; len1 = strlen(s1); len2 = strlen(s2); } //printf("s1 = %s,s2 = %sn",s1,s2); // init a1,ans for(ai=0; ai<100; ai++){ a1[ai] = 0; a2[ai] = 0; ans[ai] = 0; } la1 = 0; la2 = 0; lan = 0; // s1 * s2 int v1,v2; int j = 0; int z = 0; // eg. 12 * 123 for(i1 = len1 - 1; i1 >= 0; i1--){ // i of s1 * s2 v1 = s1[i1] - '0'; z = 0; for(ai=0; ai<j; ai++){ // carry bit a1[ai] = 0; } j++; // eg. 2 * 123 10 * 123 for(i2 = len2 - 1; i2 >=0 ;i2--){ v2 = s2[i2] - '0'; int vv = v1 * v2; a1[ai++] = (vv % 10) + z; z = vv / 10; } if(z != 0){ a1[ai++] = z; } la1 = ai; // ans += i of s1 * s2 la2 = lan; for(ani = 0; ani < lan; ani++){ a2[ani] = ans[ani]; // copy ans to a2 } // show a1 and a2 // printf("a1 = "); // for(ai=la1-1; ai>=0; ai--){ // printf("%d",a1[ai]); // }printf("n"); // printf("a2 = "); // for(ai=la2-1; ai>=0; ai--){ // printf("%d",a2[ai]); // }printf("n"); int az = 0; int asum = 0; for(ani=0; ani<la1 || ani<la2; ani++){ asum = 0; if(ani < la1){ asum += a1[ani]; } if(ani < la2){ asum += a2[ani]; } asum += az; ans[ani] = asum % 10; az = asum / 10; } if(az != 0){ ans[ani++] = az; } lan = ani; // show current ans // printf("ans = "); // for(ai=ani-1; ai>=0; ai--){ // printf("%d",ans[ai]); // }printf("nn"); } // output the final answer! printf("n%s * %s =n",s2); while(ans[--ani] == 0) ani--; if(ani < 0)printf("0"); for(ai=ani; ai>=0; ai--){ printf("%d",ans[ai]); }printf("nn"); }// end of mulBigData() int main(){ while(scanf("%s %s",s2)){ mulBigData(s1,s2); } return 0; } /* 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 * 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211 111 = 1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234 320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |