高精度程序(高-高/高-低,变量、步骤尽可能的少的使用,初始化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 高低电平/二极管实现