zoukankan      html  css  js  c++  java
  • 高精度程序(高-高/高-低,变量、步骤尽可能的少的使用,初始化0的分析,压位)

    下载地址:http://pan.baidu.com/s/1dEJPdAx

     GJD_High_Plus_High

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y[10000],numx,numy,i;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     for (i=0;i<numx;i++)
    13         x[numx-i]=c[i]-48;
    14     scanf("%s",c);
    15     numy=strlen(c);
    16     for (i=0;i<numy;i++)
    17         y[numy-i]=c[i]-48;
    18 
    19     x[numx+1]=0;
    20     for (i=numy+1;i<=numx;i++)
    21         y[i]=0;
    22     for (i=1;i<=numx;i++)
    23     {
    24         x[i]+=y[i];
    25         if (x[i]>=10)
    26         {
    27             x[i+1]++;
    28             x[i]-=10;
    29         }
    30     }
    31     if (x[i]!=0)
    32         numx++;
    33     for (i=numx;i>=1;i--)
    34         printf("%ld",x[i]);
    35     printf("
    ");
    36     return 0;
    37 }

    High_Plus_High_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y[10000],numx,numy,i,j;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     j=numx-1;
    13     numx/=4;
    14     for (i=1;i<=numx;i++)
    15     {
    16         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    17         j-=4;
    18     }
    19     if (j!=-1)
    20     {
    21         numx++;
    22         i=1;
    23         x[numx]=0;
    24         while (j>=0)
    25         {
    26             x[numx]+=i*(c[j]-48);
    27             i*=10;
    28             j--;
    29         }
    30     }
    31 
    32     scanf("%s",c);
    33     numy=strlen(c);
    34     j=numy-1;
    35     numy/=4;
    36     for (i=1;i<=numy;i++)
    37     {
    38         y[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    39         j-=4;
    40     }
    41     if (j!=-1)
    42     {
    43         numy++;
    44         i=1;
    45         y[numy]=0;
    46         while (j>=0)
    47         {
    48             y[numy]+=i*(c[j]-48);
    49             i*=10;
    50             j--;
    51         }
    52     }
    53 
    54     x[numx+1]=0;
    55     for (i=numy+1;i<=numx;i++)
    56         y[i]=0;
    57     for (i=1;i<=numx;i++)
    58     {
    59         x[i]+=y[i];
    60         if (x[i]>=10000)
    61         {
    62             x[i+1]++;
    63             x[i]-=10000;
    64         }
    65     }
    66     if (x[i]!=0)
    67         numx++;
    68     printf("%ld",x[numx]);
    69     for (i=numx-1;i>=1;i--)
    70         if (x[i]<10)
    71             printf("000%ld",x[i]);
    72         else if (x[i]<100)
    73             printf("00%ld",x[i]);
    74         else if (x[i]<1000)
    75             printf("0%ld",x[i]);
    76         else
    77             printf("%ld",x[i]);
    78     printf("
    ");
    79     return 0;
    80 }

    GJD_High_Plus_Low

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y,numx,i;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     for (i=0;i<numx;i++)
    13         x[numx-i]=c[i]-48;
    14     scanf("%ld",&y);
    15 
    16     //x>y,加法执行后x的位数最多多1位
    17     x[numx+1]=0;
    18     x[1]+=y;
    19     i=1;
    20     while (x[i]>=10)
    21     {
    22         x[i+1]+=x[i]/10;
    23         x[i]=x[i]%10;
    24         i++;
    25     }
    26     if (i>numx)
    27         numx=i;
    28     for (i=numx;i>=1;i--)
    29         printf("%ld",x[i]);
    30     printf("
    ");
    31     return 0;
    32 }

    GJD_High_Plus_Low_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y,numx,i,j;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     j=numx-1;
    13     numx/=4;
    14     for (i=1;i<=numx;i++)
    15     {
    16         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    17         j-=4;
    18     }
    19     if (j!=-1)
    20     {
    21         numx++;
    22         i=1;
    23         x[numx]=0;
    24         while (j>=0)
    25         {
    26             x[numx]+=i*(c[j]-48);
    27             i*=10;
    28             j--;
    29         }
    30     }
    31     scanf("%ld",&y);
    32     x[1]+=y;
    33     i=1;
    34     while (x[i]>=10000)
    35     {
    36         x[i+1]+=x[i]/10000;
    37         x[i]=x[i]%10000;
    38         i++;
    39     }
    40     if (i>numx)
    41         numx=i;
    42     printf("%ld",x[numx]);
    43     for (i=numx-1;i>=1;i--)
    44         if (x[i]<10)
    45             printf("000%ld",x[i]);
    46         else if (x[i]<100)
    47             printf("00%ld",x[i]);
    48         else if (x[i]<1000)
    49             printf("0%ld",x[i]);
    50         else
    51             printf("%ld",x[i]);
    52     printf("
    ");
    53     return 0;
    54 }

    ///////////////////////////////

    GJD_High_Minus_High

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y[10000],numx,numy,i;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     for (i=0;i<numx;i++)
    13         x[numx-i]=c[i]-48;
    14     scanf("%s",c);
    15     numy=strlen(c);
    16     for (i=0;i<numy;i++)
    17         y[numy-i]=c[i]-48;
    18 
    19     for (i=numy+1;i<=numx;i++)
    20         y[i]=0;
    21     for (i=1;i<=numx;i++)
    22     {
    23         x[i]-=y[i];
    24         if (x[i]<0)
    25         {
    26             x[i+1]--;
    27             x[i]+=10;
    28         }
    29     }
    30     while (x[numx]==0 && numx!=1)
    31         numx--;
    32     for (i=numx;i>=1;i--)
    33         printf("%ld",x[i]);
    34     printf("
    ");
    35     return 0;
    36 }

    GJD_High_Minus_High_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y[10000],numx,numy,i,j;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     j=numx-1;
    13     numx/=4;
    14     for (i=1;i<=numx;i++)
    15     {
    16         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    17         j-=4;
    18     }
    19     if (j!=-1)
    20     {
    21         numx++;
    22         i=1;
    23         x[numx]=0;
    24         while (j>=0)
    25         {
    26             x[numx]+=i*(c[j]-48);
    27             i*=10;
    28             j--;
    29         }
    30     }
    31 
    32     scanf("%s",c);
    33     numy=strlen(c);
    34     j=numy-1;
    35     numy/=4;
    36     for (i=1;i<=numy;i++)
    37     {
    38         y[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    39         j-=4;
    40     }
    41     if (j!=-1)
    42     {
    43         numy++;
    44         i=1;
    45         y[numy]=0;
    46         while (j>=0)
    47         {
    48             y[numy]+=i*(c[j]-48);
    49             i*=10;
    50             j--;
    51         }
    52     }
    53 
    54     for (i=numy+1;i<=numx;i++)
    55         y[i]=0;
    56     for (i=1;i<=numx;i++)
    57     {
    58         x[i]-=y[i];
    59         if (x[i]<0)
    60         {
    61             x[i+1]--;
    62             x[i]+=10000;
    63         }
    64     }
    65     while (x[numx]==0 && numx!=1)
    66         numx--;
    67     printf("%ld",x[numx]);
    68     for (i=numx-1;i>=1;i--)
    69         if (x[i]<10)
    70             printf("000%ld",x[i]);
    71         else if (x[i]<100)
    72             printf("00%ld",x[i]);
    73         else if (x[i]<1000)
    74             printf("0%ld",x[i]);
    75         else
    76             printf("%ld",x[i]);
    77     printf("
    ");
    78     return 0;
    79 }

    GJD_High_Minus_Low

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y,numx,i;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     for (i=0;i<numx;i++)
    13         x[numx-i]=c[i]-48;
    14     scanf("%ld",&y);
    15 
    16     x[1]-=y;
    17     i=1;
    18     while (x[i]<0)
    19     {
    20         x[i+1]+=(x[i]-9)/10;
    21         x[i]=x[i]%10;
    22         if (x[i]!=0)
    23             x[i]+=10;
    24         i++;
    25     }
    26     while (x[numx]==0 && numx!=1)
    27         numx--;
    28     for (i=numx;i>=1;i--)
    29         printf("%ld",x[i]);
    30     printf("
    ");
    31     return 0;
    32 }

    GJD_High_Minus_Low_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为x>y
     8     long x[10000],y,numx,i,j;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     j=numx-1;
    13     numx/=4;
    14     for (i=1;i<=numx;i++)
    15     {
    16         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    17         j-=4;
    18     }
    19     if (j!=-1)
    20     {
    21         numx++;
    22         i=1;
    23         x[numx]=0;
    24         while (j>=0)
    25         {
    26             x[numx]+=i*(c[j]-48);
    27             i*=10;
    28             j--;
    29         }
    30     }
    31     scanf("%ld",&y);
    32 
    33     x[1]-=y;
    34     i=1;
    35     while (x[i]<0)
    36     {
    37         x[i+1]+=(x[i]-9999)/10000;
    38         x[i]=x[i]%10000;
    39         if (x[i]!=0)
    40             x[i]+=10000;
    41         i++;
    42     }
    43     while (x[numx]==0 && numx!=1)
    44         numx--;
    45 
    46     printf("%ld",x[numx]);
    47     for (i=numx-1;i>=1;i--)
    48         if (x[i]<10)
    49             printf("000%ld",x[i]);
    50         else if (x[i]<100)
    51             printf("00%ld",x[i]);
    52         else if (x[i]<1000)
    53             printf("0%ld",x[i]);
    54         else
    55             printf("%ld",x[i]);
    56     printf("
    ");
    57     return 0;
    58 }

    /////////////////////////////

    GJD_High_Mul_High

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     long i,j,w,numx,numy,numz,x[10000],y[10000],z[10000];
     8     char c[10000];
     9     scanf("%s",c);
    10     numx=strlen(c);
    11     for (i=0;i<numx;i++)
    12         x[numx-i]=c[i]-48;
    13     scanf("%s",c);
    14     numy=strlen(c);
    15     for (i=0;i<numy;i++)
    16         y[numy-i]=c[i]-48;
    17     numz=numx+numy;
    18     for (i=1;i<=numz;i++)
    19         z[numz]=0;
    20     for (i=1;i<=numx;i++)
    21         for (j=1;j<=numy;j++)
    22         {
    23             w=i+j-1;
    24             z[w]+=x[i]*y[j];
    25             z[w+1]+=z[w]/10;
    26             z[w]=z[w]%10;
    27         }
    28     if (z[numz]==0)
    29         numz--;
    30     for (i=numz;i>=1;i--)
    31         printf("%ld",z[i]);
    32     printf("
    ");
    33     return 0;
    34 }

    GJD_High_Mul_High_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     long x[10000],y[10000],z[10000],numx,numy,numz,i,j,w;
     8     char c[10000];
     9     scanf("%s",c);
    10     numx=strlen(c);
    11     j=numx-1;
    12     numx/=4;
    13     for (i=1;i<=numx;i++)
    14     {
    15         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    16         j-=4;
    17     }
    18     if (j!=-1)
    19     {
    20         numx++;
    21         i=1;
    22         x[numx]=0;
    23         while (j>=0)
    24         {
    25             x[numx]+=i*(c[j]-48);
    26             i*=10;
    27             j--;
    28         }
    29     }
    30 
    31     scanf("%s",c);
    32     numy=strlen(c);
    33     j=numy-1;
    34     numy/=4;
    35     for (i=1;i<=numy;i++)
    36     {
    37         y[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    38         j-=4;
    39     }
    40     if (j!=-1)
    41     {
    42         numy++;
    43         i=1;
    44         y[numy]=0;
    45         while (j>=0)
    46         {
    47             y[numy]+=i*(c[j]-48);
    48             i*=10;
    49             j--;
    50         }
    51     }
    52 
    53     numz=numx+numy;
    54     for (i=1;i<=numz;i++)
    55         z[numz]=0;
    56     for (i=1;i<=numx;i++)
    57         for (j=1;j<=numy;j++)
    58         {
    59             w=i+j-1;
    60             z[w]+=x[i]*y[j];
    61             z[w+1]+=z[w]/10000;
    62             z[w]=z[w]%10000;
    63         }
    64     if (z[numz]==0)
    65         numz--;
    66     printf("%ld",z[numz]);
    67     for (i=numz-1;i>=1;i--)
    68         if (z[i]<10)
    69             printf("000%ld",z[i]);
    70         else if (z[i]<100)
    71             printf("00%ld",z[i]);
    72         else if (z[i]<1000)
    73             printf("0%ld",z[i]);
    74         else
    75             printf("%ld",z[i]);
    76     printf("
    ");
    77     return 0;
    78 }

    GJD_High_Mul_Low

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为y小于8位
     8     long x[10000],y,z[10000],numx,numz,i;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     for (i=0;i<numx;i++)
    13         x[numx-i]=c[i]-48;
    14     scanf("%ld",&y);
    15     z[1]=0;
    16     for (i=1;i<=numx;i++)
    17     {
    18         z[i]+=x[i]*y;
    19         z[i+1]=z[i]/10;
    20         z[i]=z[i]%10;
    21     }
    22     if (z[i]==0)
    23         numz=numx;
    24     else
    25     {
    26         numz=i;
    27         while (z[numz]>=10)
    28         {
    29             z[numz+1]+=z[numz]/10;
    30             z[numz]=z[numz]%10;
    31             numz++;
    32         }
    33     }
    34     for (i=numz;i>=1;i--)
    35         printf("%ld",z[i]);
    36     printf("
    ");
    37     return 0;
    38 }

    GJD_High_Mul_Low_YaWei

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     //认为y小于8位
     8     long x[10000],y,z[10000],numx,numz,i,j;
     9     char c[10000];
    10     scanf("%s",c);
    11     numx=strlen(c);
    12     j=numx-1;
    13     numx/=4;
    14     for (i=1;i<=numx;i++)
    15     {
    16         x[i]=c[j]-48+(c[j-1]-48)*10+(c[j-2]-48)*100+(c[j-3]-48)*1000;
    17         j-=4;
    18     }
    19     if (j!=-1)
    20     {
    21         numx++;
    22         i=1;
    23         x[numx]=0;
    24         while (j>=0)
    25         {
    26             x[numx]+=i*(c[j]-48);
    27             i*=10;
    28             j--;
    29         }
    30     }
    31 
    32     scanf("%ld",&y);
    33     z[1]=0;
    34     for (i=1;i<=numx;i++)
    35     {
    36         z[i]+=x[i]*y;
    37         z[i+1]=z[i]/10000;
    38         z[i]=z[i]%10000;
    39     }
    40     if (z[i]==0)
    41         numz=numx;
    42     else
    43     {
    44         numz=i;
    45         while (z[numz]>=10000)
    46         {
    47             z[numz+1]+=z[numz]/10000;
    48             z[numz]=z[numz]%10000;
    49             numz++;
    50         }
    51     }
    52     printf("%ld",z[numz]);
    53     for (i=numz-1;i>=1;i--)
    54         if (z[i]<10)
    55             printf("000%ld",z[i]);
    56         else if (z[i]<100)
    57             printf("00%ld",z[i]);
    58         else if (z[i]<1000)
    59             printf("0%ld",z[i]);
    60         else
    61             printf("%ld",z[i]);
    62     printf("
    ");
    63     return 0;
    64 }

    ////////////////////////////

    GJD_High_Div_High

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 int main()
      6 {
      7     //认为x>y
      8     long x[10000],y[10000],z[11][10000],numx,numy,i,j,pre,low,high,mid,vis,s;
      9     char c[10000];
     10     scanf("%s",c);
     11     numx=strlen(c);
     12     for (i=0;i<numx;i++)
     13         x[numx-i]=c[i]-48;
     14     scanf("%s",c);
     15     numy=strlen(c);
     16     for (i=0;i<numy;i++)
     17         y[numy-i]=c[i]-48;
     18     //求y*1/2/…/9的值
     19     for (i=1;i<=numy;i++)
     20         z[1][i]=y[i];
     21     z[1][0]=numy;
     22     z[0][0]=1;
     23     for (j=2;j<=10;j++)
     24     {
     25         z[j][1]=0;
     26         for (i=1;i<=z[j-1][0];i++)
     27         {
     28             z[j][i]+=z[j-1][i]+y[i];
     29             if (z[j][i]>=10)
     30             {
     31                 z[j][i]-=10;
     32                 z[j][i+1]=1;
     33             }
     34             else
     35                 z[j][i+1]=0;
     36         }
     37         if (z[j][i]==0)
     38             z[j][0]=i-1;
     39         else
     40             z[j][0]=i;
     41         //后面与x局部相减,x局部的位数至多大于z的位数1
     42         z[j][z[j][0]+1]=0;
     43     }
     44     //判断x的前numy位是否大于y;若小于,x加一位,位数比y大,肯定大于y
     45     vis=1;
     46     for (j=numy;j>=1;j--)
     47         if (x[numx-numy+j]<y[j])
     48         {
     49             vis=0;
     50             break;
     51         }
     52         else if (x[numx-numy+j]>y[j])
     53         {
     54             vis=1;
     55             break;
     56         }
     57     if (vis==0)
     58         j=numx-numy;
     59     else
     60         j=numx-numy+1;
     61 
     62     pre=numx;
     63 
     64     for (i=j;i>=1;i--)
     65     {
     66         //求x的pre~i位除以y等于几,余数是多少
     67         low=0;
     68         high=10;
     69         while (low<high-1)
     70         {
     71             mid=(low+high)>>1;
     72             if (pre-i+1<z[mid][0])
     73                 vis=0;
     74             else if (pre-i+1>z[mid][0])
     75                 vis=1;
     76             else
     77                 vis=2;
     78             if (vis==2)
     79             {
     80                 for (j=z[mid][0];j>=1;j--)
     81                     if (x[i+j-1]<z[mid][j])
     82                     {
     83                         vis=0;
     84                         break;
     85                     }
     86                     else if (x[i+j-1]>z[mid][j])
     87                     {
     88                         vis=1;
     89                         break;
     90                     }
     91             }
     92             if (vis==2)
     93             {
     94                 s=mid;
     95                 break;
     96             }
     97             if (vis==0)
     98                 high=mid;
     99             else
    100                 low=mid;
    101         }
    102         if (vis==2)
    103             s=mid;
    104         else
    105             s=low;
    106         printf("%ld",s);
    107         for (j=1;j<=pre-i+1;j++)
    108         {
    109             x[i+j-1]-=z[s][j];
    110             if (x[i+j-1]<0)
    111             {
    112                 x[i+j-1]+=10;
    113                 x[i+j]--;
    114             }
    115         }
    116         //pre为目前x的最高位
    117         //pre最小为i-1,要是for循环退出,则pre为i-1
    118         for (j=pre;j>=i;j--)
    119             if (x[j]!=0)
    120                 break;
    121         pre=j;
    122     }
    123     printf("
    ");
    124     return 0;
    125 }

    GJD_High_Div_High_1

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <stdbool.h>
      5 
      6 int main()
      7 {
      8     long x[10000],y[1001],**z,**r,answ[10000],numw,numx,numy,i,j,k;
      9     char c[10000];
     10     bool vis;
     11     z=(long **) malloc (sizeof(long *)*1001);
     12     for (i=0;i<1001;i++)
     13         z[i]=(long *) malloc (sizeof(long)*1000);
     14     r=(long **) malloc (sizeof(long *)*1001);
     15     for (i=0;i<1001;i++)
     16         r[i]=(long *) malloc (sizeof(long)*1000);
     17     scanf("%s",c);
     18     numx=strlen(c);
     19     for (i=0;i<numx;i++)
     20         x[numx-i]=c[i]-48;
     21     scanf("%s",c);
     22     numy=strlen(c);
     23     for (i=0;i<numy;i++)
     24         y[numy-i]=c[i]-48;
     25     for (i=1;i<=numy;i++)
     26         z[1][i]=y[i];
     27     z[1][0]=numy;
     28     r[1][0]=1;
     29     r[1][1]=1;
     30     for (k=2;k<=1000;k++)
     31     {
     32         z[k][1]=0;
     33         for (i=1;i<=z[k-1][0];i++)
     34         {
     35             z[k][i]+=z[k-1][i]<<1;
     36             z[k][i+1]=z[k][i]/10;
     37             z[k][i]=z[k][i]%10;
     38         }
     39         if (z[k][i]==0)
     40             z[k][0]=i-1;
     41         else
     42             z[k][0]=i;
     43         if (z[k][0]>numx)
     44             break;
     45         if (z[k][0]==numx)
     46         {
     47             vis=false;
     48             for (j=numx;j>=1;j--)
     49                 if (z[k][j]<x[j])
     50                 {
     51                     vis=false;
     52                     break;
     53                 }
     54                 else if (z[k][j]>x[j])
     55                 {
     56                     vis=true;
     57                     break;
     58                 }
     59             if (vis)
     60                 break;
     61         }
     62         r[k][1]=0;
     63         for (i=1;i<=r[k-1][0];i++)
     64         {
     65             r[k][i]+=r[k-1][i]<<1;
     66             r[k][i+1]=r[k][i]/10;
     67             r[k][i]=r[k][i]%10;
     68         }
     69         if (r[k][i]==0)
     70             r[k][0]=i-1;
     71         else
     72             r[k][0]=i;
     73     }
     74     k--;
     75     numw=r[k][0];
     76     //answ<r[k]*2 位数最多增加一位
     77     for (i=1;i<=numw+1;i++)
     78         answ[i]=0;
     79     for (j=k;j>=1;j--)
     80     {
     81         vis=false;
     82         if (z[j][0]==numx)
     83         {
     84             vis=true;
     85             for (i=numx;i>=1;i--)
     86                 if (z[j][i]<x[i])
     87                 {
     88                     vis=true;
     89                     break;
     90                 }
     91                 else if (z[j][i]>x[i])
     92                 {
     93                     vis=false;
     94                     break;
     95                 }
     96         }
     97         if (z[j][0]<numx || vis)
     98         {
     99             for (i=z[j][0]+1;i<=numx;i++)
    100                 z[j][i]=0;
    101             for (i=1;i<=numx;i++)
    102             {
    103                 x[i]-=z[j][i];
    104                 if (x[i]<0)
    105                 {
    106                     x[i]+=10;
    107                     x[i+1]--;
    108                 }
    109             }
    110             while (x[numx]==0 && numx!=1)
    111                 numx--;
    112 
    113             for (i=r[j][0]+1;i<=numw;i++)
    114                 r[j][i]=0;
    115             for (i=1;i<=numw;i++)
    116             {
    117                 answ[i]+=r[j][i];
    118                 if (answ[i]>=10)
    119                 {
    120                     answ[i+1]++;
    121                     answ[i]-=10;
    122                 }
    123             }
    124             if (answ[i]!=0)
    125                 numw++;
    126         }
    127     }
    128     for (i=numw;i>=1;i--)
    129         printf("%ld",answ[i]);
    130     printf("
    ");
    131     return 0;
    132 }

    GJD_High_Div_Low

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     long x[10000],y,numx,value=0,i,j;
     8     char c[10000];
     9     scanf("%s",c);
    10     numx=strlen(c);
    11     for (i=0;i<numx;i++)
    12         x[numx-i]=c[i]-48;
    13     scanf("%ld",&y);
    14 
    15     j=numx;
    16     while (value<y)
    17     {
    18         value=value*10+x[j];
    19         j--;
    20     }
    21 
    22     printf("%ld",value/y);
    23     value=value%y;
    24 
    25     for (i=j;i>=1;i--)
    26     {
    27         value=value*10+x[i];
    28         printf("%ld",value/y);
    29         value=value%y;
    30     }
    31     printf("
    YuShu = %ld
    ",value);
    32     return 0;
    33 }

    Quite_Bad_CHENGXU_GJD_High_Plus_High_

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 int main()
     6 {
     7     long x[10000],y[10000],z[10000]={0},numx,numy,numz,i`;
     8     char c[10000];
     9     scanf("%s",c);
    10     numx=strlen(c);
    11     for (i=0;i<numx;i++)
    12         x[numx-i]=c[i]-48;
    13     scanf("%s",c);
    14     numy=strlen(c);
    15     for (i=0;i<numy;i++)
    16         y[numy-i]=c[i]-48;
    17     if (numx>numy)
    18         numz=numx;
    19     else
    20         numz=numy;
    21     for (i=1;i<=numz;i++)
    22     {
    23         z[i]+=x[i]+y[i];
    24         if (z[i]>=10)
    25         {
    26             z[i+1]++;
    27             z[i]-=10;
    28         }
    29     }
    30     if (z[numz+1]!=0)
    31         numz++;
    32     for (i=numz;i>=1;i--)
    33         printf("%ld",z[i]);
    34     printf("
    ");
    35     return 0;
    36 }

    二进制下,乘法和除法,因为只有0,1,不用乘/除。

    以后思考二进制加/减/乘/除在电路下的实现

    加法,减法如何用not/and/or 高低电平/二极管实现

  • 相关阅读:
    把自己活成AI
    cmd 中文显示错误,解决办法
    直流通路,交流通路的理解 三极管
    欧拉公式的理解
    从一个量分别和两个量成正比,怎么推理出和他们乘积成正比?
    细说python类3——类的创建过程
    delphi 基础之二 面向对象概念初步
    delphi 基础之一 数据类型和基本语法
    delphi的多线程编程
    Delphi初学者应小心的六大陷阱
  • 原文地址:https://www.cnblogs.com/cmyg/p/6580263.html
Copyright © 2011-2022 走看看