您的位置:首页 > 其它

高精度之除法模板

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() {;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: