大数相乘
比赛中经常会遇到大数问题,自己写了一个大数相乘的模板,可能会有Bug,先凑合看吧;
#include<stdio.h> #include<string.h> const int M = 100; void GetDigit(char s[],int a[]) { int i; memset(a,0,sizeof(int)*M); int len = strlen(s); for(i = 0; i < len; i++) { a[len-1-i] = s[i]-'0'; } } void Multiply(int a[], int b[], int c[]) { int i,j; for(i = 0; i < M*2; i++) c[i] = 0; for(i = 0; i < M; i++) { for(j = 0; j < M; j++) { c[i+j] += a[i]*b[j]; } } for(i = 0; i < 2*M; i++) { c[i+1] += c[i]/10; c[i] %= 10; } } int main() { char s1[M],s2[M],s[M*2]; int a[M],b[M],c[M*2]; int i,j; while(~scanf("%s %s",s1,s2)) { int len1 = strlen(s1); int len2 = strlen(s2); GetDigit(s1,a); GetDigit(s2,b); Multiply(a,b,c); while(c[j] == 0) j--; for(i = j; i >= 0; i--) printf("%d",c[i]); printf("\n"); } return 0; }