今天算是彻底进入了算法的学习,当然第一个接触的高精度,没什么好说的,先放几段自己的代码,高精度要多练习。
高精度加法:
#include<cstdio> #include<cstring> using namespace std; int main() { char n1[100],n2[100]; int a[100],b[100],c[100],x,i,lena,lenb,lenc; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(n1);gets(n2); lena=strlen(n1);lenb=strlen(n2); for(int i=0;i<=lena-1;++i) a[lena-i]=n1[i]-48; for(int i=0;i<=lenb-1;++i) b[lenb-i]=n2[i]-48; lenc=1;x=0; while(lenc<=lena||lenc<=lenb) { c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]; ++lenc; } c[lenc]=x; if(c[lenc]==0) --lenc; for(int i=lenc;i>=1;--i) cout<<c[i]; printf("\n"); return 0; }高精度减法:
#include<cstdio> #include<cstring> using namespace std; int main() { int a[256],b[256],c[256],lena,lenb,lenc,i; char n[256],n1[256],n2[256]; memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c)); gets(n1);gets(n2); if(strlen(n1)<strlen(n2)||strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0) { strcpy(n,n1);strcpy(n1,n2);strcpy(n2,n); cout<<'-'; } lena=strlen(n1);lenb=strlen(n2); for(int i=0;i<=lena-1;++i) a[lena-i]=n1[i]-48; for(int i=0;i<=lenb-1;++i) b[lenb-i]=n2[i]-48; lenc=1; while(lenc<=lena||lenc<=lenb) { if(a[lenc]<b[lenc]) { a[lenc]+=10; a[lenc+1]--; } c[lenc]=a[lenc]-b[lenc]; ++lenc; } while((c[lenc]==0)&&lenc>1) --lenc; for(int i=lenc;i>=1;--i) cout<<c[i]; printf("\n"); return 0; }