高精加:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 #define N 1000 6 7 using namespace std; 8 9 int a[N],b[N],c[N]; 10 char as[N],bs[N]; 11 int al,bl,cl;; 12 13 int main() 14 { 15 cin>>as; 16 cin>>bs; 17 al=strlen(as); 18 bl=strlen(bs); 19 for(int i=al-1;i>=0;i--) 20 a[al-i]=as[i]-'0'; 21 for(int i=bl-1;i>=0;i--) 22 b[bl-i]=bs[i]-'0'; 23 for(int i=1;i<=max(al,bl);i++) 24 c[i]=a[i]+b[i]; 25 cl=max(al,bl); 26 for(int i=1;i<=cl;i++) 27 if(c[i]>=10) 28 { 29 c[i+1]+=1; 30 c[i]%=10; 31 } 32 if(c[cl+1]!=0) 33 cl++; 34 for(int i=cl;i>=1;i--) 35 printf("%d",c[i]); 36 return 0; 37 }
高精减:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 #define N 1000 6 7 using namespace std; 8 9 char as[N],bs[N],cs[N]; 10 int a[N],b[N],c[N]; 11 int al,bl,cl; 12 13 void jiaohuan() 14 { 15 printf("-"); 16 int p=al; 17 al=bl; 18 bl=p; 19 strcpy(cs,as); 20 strcpy(as,bs); 21 strcpy(bs,cs); 22 memset(c,0,sizeof(c)); 23 } 24 25 int main() 26 { 27 cin>>as; 28 cin>>bs; 29 al=strlen(as); 30 bl=strlen(bs); 31 if(bl>al||(al==bl&&strcmp(as,bs)<0)) 32 jiaohuan(); 33 for(int i=al-1;i>=0;i--) 34 a[al-i]=as[i]-'0'; 35 for(int i=bl-1;i>=0;i--) 36 b[bl-i]=bs[i]-'0'; 37 cl=max(al,bl); 38 for(int i=1;i<=cl;i++) 39 c[i]=a[i]-b[i]; 40 for(int i=1;i<=cl;i++) 41 if(c[i]<0) 42 { 43 c[i]+=10; 44 c[i+1]--; 45 } 46 if(c[cl]<=0) 47 cl--; 48 for(int i=cl;i>0;i--) 49 if(c[i]>0) 50 printf("%d",c[i]); 51 else 52 printf("0"); 53 return 0; 54 }
高精乘:
#include<cstdio> #include<iostream> #include<cstring> #define N 500*500+10 using namespace std; char as[N],bs[N],cs[N]; int a[N],b[N],c[N]; int al,bl,cl; int main() { cin>>as; cin>>bs; al=strlen(as); bl=strlen(bs); for(int i=al-1;i>=0;i--) a[al-i]=as[i]-'0'; for(int i=bl-1;i>=0;i--) b[bl-i]=bs[i]-'0'; for(int i=1;i<=al;i++) { int x=0; for(int j=1;j<=bl;j++) { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+bl]=x; } cl=al+bl; while(c[cl]==0&&cl>1) cl--; for(int i=cl;i>0;i--) printf("%d",c[i]); return 0; }
高精除(高精除单精):
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 #define N 5000 6 7 using namespace std; 8 9 char as[N]; 10 int a[N],c[N]; 11 int al,bl,b,x; 12 13 int main() 14 { 15 cin>>as; 16 cin>>b; 17 al=strlen(as); 18 for(int i=0;i<al;i++) 19 a[i+1]=as[i]-'0'; 20 for(int i=1;i<=al;i++) 21 { 22 c[i]=(x*10+a[i])/b; 23 x=(x*10+a[i])%b; 24 } 25 bl=1; 26 while(c[bl]==0&&bl<al) 27 bl++; 28 for(int i=bl;i<=al;i++) 29 printf("%d",c[i]); 30 return 0; 31 }
实数加法:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 char as[101],bs[101],cs[101]; 6 int a1[101],a2[101],b1[101],b2[101],c1[101],c2[101],t[101]; 7 int l11,l12,l21,l22,l,l1,l2,s; 8 int main() 9 { 10 cin>>as>>bs; 11 l1=strlen(as); 12 l2=strlen(bs); 13 for(int i=l1-1;i>=0;i--) 14 as[i+1]=as[i]; 15 for(int i=l2-1;i>=0;i--) 16 bs[i+1]=bs[i]; 17 int p=1; 18 while(as[p]!='.') 19 a1[p]=as[p]-'0',p++; 20 l11=p-1; 21 while(p<=l1) 22 { 23 a2[p-l11-1]=as[p]-'0'; 24 p++; 25 } 26 l12=l1-l11-1; 27 p=1; 28 while(bs[p]!='.') 29 b1[p]=bs[p]-'0',p++; 30 l21=p-1; 31 while(p<=l2) 32 { 33 b2[p-l21-1]=bs[p]-'0'; 34 p++; 35 } 36 l22=l2-l21-1; 37 for(int i=1;i<=l11;i++) 38 t[l11-i+1]=a1[i]; 39 for(int i=1;i<=l11;i++) 40 a1[i]=t[i]; 41 for(int i=1;i<=l21;i++) 42 t[l21-i+1]=b1[i]; 43 for(int i=1;i<=l21;i++) 44 b1[i]=t[i]; 45 l=max(l11,l21); 46 for(int i=1;i<=l;i++) 47 c1[i]=a1[i]+b1[i]; 48 for(int i=1;i<=l;i++) 49 if(c1[i]>9) 50 { 51 c1[i]%=10; 52 c1[i+1]++; 53 } 54 if(c1[l+1]!=0) l++; 55 s=max(l12,l22); 56 for(int i=1;i<=s;i++) 57 c2[i]=a2[i]+b2[i]; 58 for(int i=s;i>=1;i--) 59 if(c2[i]>9) 60 { 61 c2[i]%=10; 62 c2[i-1]++; 63 } 64 if(c2[0]!=0) 65 c1[1]++; 66 for(int i=l;i>=1;i--) 67 printf("%d",c1[i]); 68 printf("."); 69 for(int i=1;i<=s;i++) 70 printf("%d",c2[i]); 71 return 0; 72 }