洛谷【P1480】A/B Problem
题目传送门:https://www.luogu.org/problemnew/show/P1480
高精除低精板子题,灵性地回忆一下小学时期列竖式的草稿纸即可。
时间复杂度:\(O(len)\)
空间复杂度:\(O(len)\)
代码如下:
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=5005;
int x;
char s[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct Bignum {
int num[maxn];
void make() {
num[0]=strlen(s+1);
for(int i=1;i<=num[0];i++)
num[i]=s[num[0]-i+1]-'0';
}
void print() {
for(int i=num[0];i;i--)
printf("%d",num[i]);
}
Bignum operator/(const int &a)const {
Bignum c;memset(c.num,0,sizeof(c.num));
c.num[0]=num[0];int tmp=0;
for(int i=num[0];i;i--) {
tmp=tmp*10+num[i];
c.num[i]=tmp/a;tmp%=a;
}
while(c.num[0]>1&&!c.num[c.num[0]])c.num[0]--;//把前导零去掉
return c;
}
}a,b;
int main() {
scanf("%s",s+1);a.make();
x=read();b=a/x;b.print();
return 0;
}