poj 1152

数据量不大,可以直接枚举。首先确定所需要的最小进制,然后从此处向62进行枚举。然后就是关于求摸的问题。不可能把整个数先求出来。因为数很大,根本存不下。根据求摸公式可得结果a1a2a3a4...a(s)%(n-1)=(a1+a2+...a(s)))%(n-1)

#include <iostream>
#include <cstring>
using namespace std;
char s[40000];
int get(char a)
{
	if(a>='0'&&a<='9') return a-'0';
	else if(a>='A'&&a<='Z') return a-'A'+10;
	else return a-'a'+36;
}
int main()
{
	while(cin>>s)
	{
		int i;
		int max=0,t;
		int len=strlen(s);
		for(i=0;i<len;i++)
		{
			t=get(s[i])+1;
			if(max<t) max=t;
		}

		int sum=0,j;
		for(j=0;j<len;j++)
				sum+=get(s[j]);
		for(i=max;i<=62;i++)
		{
			if(sum%(i-1)==0)
			{
				cout<<i<<endl;
				break;
			}
		}
		if(i>62) cout<<"such number is impossible!"<<endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/lj030/p/3002228.html