求模(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 }
时间: 2024-10-13 11:42:29