高精度程序(高-高/高-低,变量、步骤尽可能的少的使用,初始化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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\n");
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("\nYuShu = %ld\n",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("\n");
35     return 0;
36 }

 

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

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

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

 

posted @ 2017-03-19 13:40  congmingyige  阅读(223)  评论(0编辑  收藏  举报