Luogu2005 A/B Problem II
Posted gk0328
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu2005 A/B Problem II相关的知识,希望对你有一定的参考价值。
https://www.luogu.com.cn/problem/P2005
高精度除法
模板题,居然发现还没填上小学时高精除高精的坑(一定是我太菜了)
用减法模拟除法,只要大于除数,就暴力减,这一位的(ans++)
(C++ Code:)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#define N 100005
using namespace std;
int alen,blen,a[N],b[N],c[N],t[N],p[N],q[N];
char A[N],B[N];
bool cop(int *a,int *b)
{
if (a[0]<b[0])
return false;
if (a[0]>b[0])
return true;
for (int i=1;i<=a[0];i++)
if (a[i]^b[i])
return a[i]>b[i];
return true;
}
void del(int a[],int *b)
{
p[0]=a[0];
for (int i=1;i<=a[0];i++)
p[i]=a[a[0]-i+1];
for (int i=1;i<=a[0];i++)
{
if (p[i]<q[i])
p[i]+=10,p[i+1]--;
p[i]-=q[i];
}
while (!p[p[0]]&&p[0]!=1)
p[0]--;
a[0]=p[0];
for (int i=1;i<=a[0];i++)
a[i]=p[a[0]-i+1];
}
void cf(int *a,int *b)
{
for (int i=1;i<=alen;i++)
{
t[++t[0]]=a[i];
while (cop(t,b))
{
del(t,b);
c[i]++;
}
}
bool flag=true;
for (int i=1;i<=alen;i++)
if (flag&&!c[i])
continue; else
{
flag=false;
putchar(c[i]+‘0‘);
}
if (flag)
putchar(‘0‘);
putchar(‘
‘);
}
int main()
{
scanf("%s%s",A+1,B+1);
alen=strlen(A+1),blen=strlen(B+1);
a[0]=alen,b[0]=blen;
for (int i=1;i<=alen;i++)
a[i]=A[i]-‘0‘;
for (int i=1;i<=blen;i++)
b[i]=B[i]-‘0‘;
for (int i=1;i<=b[0];i++)
q[i]=b[b[0]-i+1];
cf(a,b);
return 0;
}
以上是关于Luogu2005 A/B Problem II的主要内容,如果未能解决你的问题,请参考以下文章