求模(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 ",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(" "); 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]='