#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000];
int len1,len2,len;
int index;
int re[1000],p=0; //记录结果
int judge()
{
int i,j;
for(i=len2-1,j=len1-1;i>=0;i--,j--)
{
if(a[j]<b[i])
return 1;
else if(a[j]>b[i])
return 0;
else
continue;
}
return 0;
}
int main()
{
string n,m;
while(cin>>n>>m)
{
index=1;
memset(re,0,sizeof(re));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int i,j;
for(i=0;i<n.size();i++) //倒序存储
{
a[n.size()-1-i]=n[i]-'0';
}
for(i=0;i<m.size();i++)
{
b[m.size()-1-i]=m[i]-'0';
}
len1=n.size();
len2=m.size();
index=len1-len2;
int time=index+1;
if(len1==len2&&judge()||len1<len2)
{
cout<<0<<endl;
continue;
}
if(b[0]==0)
{
cout<<0<<endl;
continue;
}
while(index>=0) //index相当于除数先与被除数的相同数位对应,例如除数有两位,那么它先与被除数的头两位对应
{
if(judge())
{
if(a[len1-1]==0) //之前被除数的数位减去除数的数位 ,使得最后一位变为零,那么将数组a的长度减一,再修正index
{
len1--;
if(index!=len1-len2)
{
index=len1-len2;
p++;
}
if(index<0)
break;
}
if(judge()&&len1-index==len2) //将被除数与除数的对应数位比较,如除数先与被除数头两位比较,若除数大,则index--,模拟手算
{
index--;
p++;
if(index<0)
break;
}
}
for(i=index,j=0;i<len1,j<len2;i++,j++) //不断进行相减
{
if(a[i]<b[j])
{
a[i]=a[i]+10-b[j];
a[i+1]--;
}
else
{
a[i]=a[i]-b[j];
}
}
re[p]++; //相减多少次,商就变为多少
}
i=0;
while(re[i]==0) //除去前导零
i++;
for(;i<p;i++) //输出
cout<<re[i];
cout<<endl;
}
return 0;
}
高精度除法(高精除高精)
最新推荐文章于 2024-08-06 14:43:58 发布