my高精模板

网上的鱼龙混杂,不如自己写个。

 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 }

猜你喜欢

转载自www.cnblogs.com/Wangsheng5/p/11627237.html