高精度加1
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 char a[310], b[310];
6 int c[310], d[310], e[310];
7 scanf("%s %s", a, b);
8 int x = strlen(a), y = strlen(b);
9 for (int i = 0; i < x; i++) {
10 c[x-1-i] = a[i] - '0';
11 }
12 for (int i = 0; i < y; i++) {
13 d[y-1-i] = b[i] - '0';
14 }
15 int l = (x > y) ? x : y;
16 memset(e, 0, sizeof(e));
17 for (int i = 0; i < l; i++) {
18 e[i] += c[i] + d[i];
19 if(e[i] > 9) e[i] -= 10,e[i+1] = 1;
20 }
21 if(e[l]) l++;
22 for(int i = l-1; i >= 0; i--) printf("%d", e[i]);
23 printf("
");
24 return 0;
25 }
高精度减法
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4
5 const int maxn = 300 + 5;
6
7 int main(int argc, char **argv) {
8 int a[maxn], b[maxn], c[maxn];
9 char s1[maxn], s2[maxn];
10 char *ss1 = s1, *ss2 = s2;
11 memset(a, 0, sizeof(a) );
12 memset(b, 0, sizeof(b) );
13 memset(c, 0, sizeof(c) );
14
15 scanf("%s%s", s1, s2);
16 if( strlen(s1)<strlen(s2) || (strlen(s1)==strlen(s2)&&strcmp(s1,s2)<0) ){
17 ss1 = s2;
18 ss2 = s1;
19 printf("-");
20 }else if( !strcmp(s1,s2) ){
21 printf("0");
22 return 0;
23 }
24 int len1 = strlen(ss1);
25 int len2 = strlen(ss2);
26 for( int i=0; i<len1; i++ )
27 a[len1-1-i] = ss1[i]-'0';
28 for( int i=0; i<len2; i++ )
29 b[len2-1-i] = ss2[i]-'0';
30 int j;
31 for( j=0; j<len1||j<len2; j++ ){
32 c[j] += a[j]-b[j];
33 if( c[j]<0 ){
34 c[j] += 10;
35 c[j+1] --;
36 }
37 }
38 int lenc = j;
39 for( ; lenc>=0 && !c[lenc]; lenc-- );
40 for( ; lenc>=0; lenc-- )
41 printf("%d", c[lenc]);
42 /*scanf("%s%s", s1, s2);
43 printf("%d", strcmp(ss1, ss2));*/
44
45 return 0;
46 }
高精度乘法
1 #include<cstdio>
2 #include<cstring>
3 using namespace std;
4
5 char a1[55],b1[55];
6 int a[55],b[55],c[125];
7
8 int main(){
9 scanf("%s%s",a1,b1);
10 int lena=strlen(a1);
11 int lenb=strlen(b1);
12 for(int i=1;i<=lena;i++)
13 a[i]=a1[lena-i]-'0';
14 for(int i=1;i<=lenb;i++)
15 b[i]=b1[lenb-i]-'0';
16 for(int i=1;i<=lena;i++){
17 int x=0;
18 for(int j=1;j<=lenb;j++){
19 c[i+j-1]+=a[i]*b[j]+x;
20 x=c[i+j-1]/10;
21 c[i+j-1]%=10;
22 }
23 c[i+lenb]=x;
24 }
25 int lenc=lena+lenb;
26 while(c[lenc]==0&&lenc>1)
27 lenc--;
28 while(lenc)
29 printf("%d",c[lenc--]);
30 return 0;
31 }
高精乘除单精法
1 #include<stdlib.h>
2 #include<stdio.h>
3 char s[501],ch;
4 int a[501],b,ka,k=0;
5 void f()
6 {
7 int i,c=0;
8 for(i=0;i<k;i++)
9 {
10 a[i]=a[i]*b+c;
11 if(a[i]>=10)
12 {
13 c=a[i];
14 a[i]=a[i]%10;
15 c=c/10;
16 }else c=0;
17 }
18 if(c!=0) printf("%d",c);
19 for(i=k-1;i>=0;i--)
20 printf("%d",a[i]);
21 }
22 void x()
23 {
24 int d=0,i,c;
25 for(i=k-1;i>=0;i--)
26 {
27 c=a[i]+d*10;
28 a[i]=(a[i]+d*10)/b;
29 d=c%b;
30 }
31 while((a[k-1]==0)&&(k>0)) k--;
32 for(i=k-1;i>=0;i--)
33 printf("%d",a[i]);
34 if(d!=0)
35 printf("---%d",d);
36 }
37 int main()
38 {
39 int i,temp;
40 scanf("%s",s);
41 while((s[k]!='*')&&(s[k]!='/'))
42 {
43 a[k]=s[k]-'0';
44 k++;
45 }
46 ch=s[k];
47 b=s[strlen(s)-1]-'0';
48 ka=k;//读入
49 for(i=0;i<(ka>>1);i++)
50 {
51 temp=a[i];
52 a[i]=a[ka-1-i];
53 a[ka-1-i]=temp;
54 }
55 if(ch=='*') f(); else x();
56 system("pause");
57 return 0;
58 }