先貼一個簡單的高精度除以單精度的:ios
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { char a[510]; int c[510]; int b,l; while (~scanf("%s%d",&a,&b)) { memset(c,0,sizeof(c)); l=strlen(a); int ys=0; int t=0,i; for (i=0;i<l;i++) { if (a[i]-'0'+10*ys>=b) { c[t]=(a[i]-'0'+10*ys)/b; ys=(a[i]-'0'+10*ys)%b; t++; } else ys=ys*10+a[i]-'0'; } while (c[i]==0) i--; for (int j=i;j>=0;j--) printf("%d",c[j]); if (ys) printf(" %d",ys); printf("\n"); } return 0; }
而後就是高精度除以高精度了,原理利用高精度減法求商吧...很蛋疼的是各類數據OK,就是AC不了,不知道爲何,哪位指出錯誤,感謝...spa
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; char c[510]; int ff(char a[510],char b[510]) { int cc[510]; int la,lb,k; memset(cc,0,sizeof(cc)); la=strlen(a)-1; lb=strlen(b)-1; k=la+1; int t=0; while (k--) { if (lb>=0) cc[t]=(a[la--]-b[lb--]); else cc[t]=a[la--]-'0'; if (cc[t]<0) { a[la]--; cc[t]+=10; } t++; } while (cc[t]==0) t--; int ff=t; memset(c,0,sizeof(c)); for (int j=t;j>=0;j--) c[ff-j]=cc[j]+'0'; c[ff+1]='\0'; return ff+1; } int main() { char a[510],b[510],f[510]; while (cin>>a>>b) { int num=0,T=0; int la=strlen(a); int lb=strlen(b); if (la<lb || la==lb && strcmp(a,b)<0) cout<<"0"<<" "<<a<<endl; else { int i; for (i=0;i<lb;i++) c[i]=a[i]; c[i]='\0'; if (strcmp(c,b)<0) { c[i++]=a[i]; c[i]='\0'; } while (i<=la) { int h; while (1) { num++; h=ff(c,b); if (strlen(c)<strlen(b) || strlen(c)==strlen(b) && strcmp(c,b)<0) break; } f[T++]=num+'0'; num=0; while (1) { c[h++]=a[i]; c[h]='\0'; int j=0; while (c[0] =='0' && strlen(c)!=1) { for(j=0;j<strlen(c);j++) c[j]=c[j+1]; } i++; if (strlen(c)>strlen(b) ||(strlen(c)==strlen(b) && strcmp(c,b)>=0) || i==la+1) break; f[T++]='0'; } } f[T++]='\0'; cout<<f<<" "; int l=strlen(c)-1; while (c[l]-'0'==0) l--; if (l+1) cout<<c<<endl; else cout<<endl; } } return 0; }