POJ-2325解题报告

简单分析之后就是一道很水的模拟题(今天累了不想写题意

比较坑的是没看见数字有一千位要写高精度,不过也只需写高精度整除


很久没写高精度算法,很多细节没记清,调了近一个小时,过了样例后就一次A了

#include 
#include 
#include 
#include 

const int MAXN = 4096;

int n,flag;
int a[MAXN],b[16],c[MAXN],d[MAXN];
char s[MAXN];

void Deal(int x)
{
	int j;
	flag = 0;
	for (int i=0; i<=d[0]; ++i)
		a[i] = d[i];
	a[ a[0]+1 ] = 0;
	for (int i=1; i<=a[0]; ++i)
	{
		c[i] = a[i]/x;
		a[i] %= x;
		a[i+1] += a[i]*10;
	}
	if (a[ a[0]+1 ]==0)	flag = 1;
	if (flag)
	{
		++b[x];
		j = 0;
		while (c[j]==0) ++j;
		d[0] = a[0]+1-j;
		for (int i=1; i<=d[0]; ++i,++j)
			d[i] = c[j];
	}
}

int main()
{
	while (scanf("%s",s) && s[0]!='-')
	{
		memset( b, 0, sizeof(b) );
		d[0] = strlen(s);
		for (int i=0; i1; --i)
				do
					Deal(i);
				while (flag);
		if (d[0]>1)	printf("There is no such number.\n");
		else
		{
			for (int i=1; i<=9; ++i)
				for (int j=0; j

你可能感兴趣的:(解题报告)