高精度之除法模板
2016-09-17 20:40
225 查看
用减法来模拟除法
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; string s1,s2; int a[520],b[520]; int ans[520],t[520]; using namespace std; inline void chuli() { a[0]=s1.size();b[0]=s2.size(); reverse(s1.begin(),s1.end()); for(int i=0;i<a[0];i++) a[i+1]=s1[i]-'0'; reverse(s2.begin(),s2.end()); for(int i=0;i<b[0];i++) b[i+1]=s2[i]-'0'; } inline bool compare(int x[],int y[]) { if(x[0]<y[0]) return false; if(x[0]>y[0]) return true; for(int i=x[0];i;i--) { if(x[i]>y[i]) return true; if(x[i]<y[i]) return false; } return true; } inline void sub(int x[],int y[]) { for(int i=1;i<=x[0];i++) { if(x[i]<y[i]) { x[i+1]--; x[i]+=10; } x[i]-=y[i]; } while(!x[x[0]]&&x[0]>1) x[0]--; } inline void div() { ans[0]=a[0]-b[0]+1; for(int i=ans[0];i;i--) { memset(t,0,sizeof t); for(int j=1;j<=b[0];j++) t[j+i-1]=b[j]; t[0]=b[0]+i-1; while(compare(a,t)) ans[i]++,sub(a,t); } return; } int hh() { cin>>s1>>s2; chuli(); if(a[0]<b[0]||(a[0]==b[0])&&a[a[0]-1]<b[b[0]-1]) { printf("0\n"); return 0; } div(); while(!ans[ans[0]]&&ans[0]>1) ans[0]--; for(int i=ans[0];i;i--) printf("%d",ans[i]); printf("\n"); return 0; } int hhh=hh(); int main() {;}
相关文章推荐
- 我的高精度除法模板
- 高精度除法模板
- 高精度 大数加法 乘法 除法 幂 模板
- 高精度除法(大数除int型)模板
- [ACM模板] BigInt高精度加/减/除法
- 【高精度】【高精度四则运算模板】高精度除法
- CODE【VS】3118 高精度练习之除法(大数除以大数模板)
- 高精度 大数加法 乘法 除法 模板
- 高精度(大整数除法)
- 【总结】高精度计算(Arbitrary-precision arithmetic)的模板 CPP Language
- 高精度之高精度除法(高精除以高精)
- 高精度整数模板(转)
- 高精度模板
- 高精度模板
- 高精度模板
- 模板-高精度A+B,A-B
- 高精度之减法模板
- 高精度模板
- poj 2325 Persistent Numbers(高精度除法+贪心)
- bign类C++高精度模板