网上的鱼龙混杂,不如自己写个。
1 char str[1000]; 2 int a[1000],b[1000],c[1000]; 3 4 int main(){ 5 scanf("%s",str); 6 int len = strlen(str); 7 for(int i = len-1;i >= 0;i--)a[len-i] = str[i]-'0'; 8 scanf("%s",str); 9 int n = len; 10 len = strlen(str); 11 for(int i = len-1;i >= 0;i--)b[len-i] = str[i]-'0'; 12 int m = len; 13 n = max(n,m); 14 15 for(int i = 1;i <= n;i++)c[i] = a[i]+b[i]; 16 for(int i = 1;i <= n;i++)c[i+1] += c[i]/10,c[i] %= 10; 17 while(c[n] > 10||c[n+1])c[n+1] += c[n]/10,c[n] %= 10,n++; 18 19 for(int i = n;i > 0;i--)putchar(c[i]+'0');putchar('\n'); 20 21 return 0; 22 }
1 char s[1000]; 2 int b; 3 int a[1000],c[1000]; 4 int n,m; 5 6 int main(){ 7 scanf("%s",s); 8 int n = strlen(s); 9 for(int i = n-1;i >= 0;i--)a[n-i] = s[i] - '0'; 10 scanf("%d",&b); 11 12 for(int i = 1;i <= n;i++)c[i] = a[i]*b; 13 for(int i = 1;i <= n;i++)c[i+1] += c[i]/10,c[i] %= 10; 14 while(c[n] > 10||c[n+1])c[n+1] += c[n]/10,c[n] %= 10,n++; 15 16 for(int i = n;i >= 1;i--)putchar(c[i]+'0'); 17 18 return 0; 19 }
1 struct bignum{ 2 int a[1000]; 3 int len; 4 5 void init(){memset(a,0,sizeof(a));} 6 7 void get(){ 8 init(); 9 char s[1000]; 10 scanf("%s",s); 11 len = strlen(s); 12 for(int i = len-1;i >= 0;i--)a[len-i] = s[i]-'0'; 13 } 14 15 void print(){ 16 for(int i = len;i > 0;i--)putchar(a[i]+'0'); 17 } 18 19 void initlen(){ 20 for(len = 999;len > 0;len--)if(a[len])break; 21 } 22 23 bignum operator *(bignum x){ 24 bignum ans; 25 ans.init(); 26 for(int i = 1;i <= len;i++) 27 for(int j = 1;j <= x.len;j++) 28 ans.a[i+j-1] += a[i]*x.a[j]; 29 for(int i = 1;i < 1000;i++)ans.a[i+1] += ans.a[i]/10,ans.a[i] %= 10; 30 ans.initlen(); 31 return ans; 32 } 33 }x,y,z; 34 35 int main(){ 36 x.get(),y.get(); 37 (x*y).print(); 38 return 0; 39 }