高精度运算(大数)

求模(mod):直接在草稿纸上用小学方法算除法就能看出来

 1 #include<stdio.h>
 2 #include<string.h>
 3 char m[1010];
 4 int main(){int n,temp;
 5     while(~scanf("%s %d",m,&n)){temp=0;
 6         for(int i=0;i<strlen(m);++i){
 7             temp=temp*10+m[i]-'0';
 8             temp%=n;
 9         }
10         printf("%d\n",temp);
11     }
12     return 0;
13 }

大数阶乘:模板。。。。理解就好。。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 100010
 4 int a[N];
 5 int main()
 6 {
 7     int i,j,m;
 8     scanf("%d",&m);
 9     memset(a,0,sizeof(a));
10     a[0]=1;
11     for(i=2;i<=m;i++)
12     {
13         int c=0;
14         for(j=0;j<N;j++)
15         {
16             int s=a[j]*i+c;
17             a[j]=s%10;
18             c=s/10;
19         }
20     }
21     for(j=N-1;j>=0;j--)
22     {
23         if(a[j])
24         break;
25     }
26     for(i=j;i>=0;i--)
27     {
28         printf("%d",a[i]);
29     }
30     printf("\n");
31     return 0;
32 }

大数相乘:自己敲的可能有些麻烦:

 1 #include<stdio.h>
 2 #include<string.h>
 3 char a[201],b[201];
 4 char c[500];
 5 int bignum(){
 6 int x[201],y[201],t1,t2,t,i,j,z[500];
 7 memset(z,0,sizeof(z));
 8 t1=strlen(a);t2=strlen(b);
 9 for(i=t1-1,j=0;i>=0;--i,j++)x[j]=a[i]-'0';
10 for(i=t2-1,j=0;i>=0;--i,j++)y[j]=b[i]-'0';
11 for(i=0;i<t1;i++){
12 for(j=0;j<t2;j++){
13 z[j+i]=z[j+i]+x[i]*y[j];
14 t=i+j;
15 }
16 }
17 for(i=0;i<=t;i++){
18 if(z[i]>10)z[i+1]+=z[i]/10,z[i]%=10;
19 if(i==t&&z[t+1])t++;
20 }
21 for(i=t,j=0;i>=0;--i,++j)c[j]=z[i]+'0';
22 c[j]='\0';
23 }
24 int main(){
25 int T;
26 scanf("%d",&T);
27 while(T--){
28 scanf("%s%s",a,b);
29 bignum();
30 printf("%s\n",c);
31 }
32 return 0;}

大数相加:hd1047:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAX(x,y) x>y?x:y
 4 char c[1010];
 5 void bigsum(char *a,char *b){
 6     int x[1010],y[1010],z[1010],t1,t2,t,i,j;
 7     memset(x,0,sizeof(x));
 8     memset(y,0,sizeof(y));
 9     memset(z,0,sizeof(z));
10     t1=strlen(a),t2=strlen(b);
11     t=MAX(t1,t2);
12     for(i=t1-1,j=0;i>=0;j++,i--)x[j]=a[i]-'0';
13     for(i=t2-1,j=0;i>=0;j++,i--)y[j]=b[i]-'0';
14     for(i=0;i<t;++i){
15         z[i]=x[i]+y[i]+z[i];
16         if(z[i]>9)z[i]-=10,z[i+1]++;
17         if(i==t-1&&z[t])t++;
18     }
19     for(i=t-1;i>0;i--)if(z[i])break;
20     for(j=0;i>=0;i--,j++){
21         c[j]=z[i]+'0';
22     }
23     c[j]='\0';
24 }
25 int main(){
26     int T,flot=0,N;
27     char a[1010];
28     scanf("%d",&N);
29     while(N--){memset(c,0,sizeof(c));
30         while(scanf("%s",a)){
31             bigsum(a,c);
32             if(!strcmp(a,"0"))break;
33         }
34         printf("%s\n",c);
35         if(N)puts("");
36     }
37     return 0;
38 }

 

你可能感兴趣的:(运算)