• 高精度运算(大数)


    求模(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]='';
    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
    ",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]='';
    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
    ",c);
    35         if(N)puts("");
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    boost::function和boost::bind 介绍
    va_list 简介
    tcp异常断开的重连解决方法
    Nginx作为代理服务之反向代理
    Nginx作为代理服务之正反代理
    Nginx作为静态资源web服务之防盗链
    Nginx作为静态资源web服务之跨域访问
    Nginx作为静态资源web服务之缓存原理
    Nginx作为静态资源web服务之文件读取
    阿里云环境中配置tomcat7可能出现的问题及解决方法
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4674155.html
Copyright © 2020-2023  润新知