洛谷【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;
}
posted @ 2018-09-29 16:43  AKMer  阅读(220)  评论(0编辑  收藏  举报