题意: 正如题目所说,一个简单的问题!输入一个2-62进制的数字,即假设这个数字是n进制,则这个数x%(n-1)==0。好吧,既然如此简单,就不废话了。。。。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[100000];
int main()
{
int i,s,len,max;
bool d;
while(scanf("%s",a)!=EOF)
{
len=strlen(a);
s=0;
max=0; //max记录所能代表的最小进制数(比如数字里面有B,则这个进制至少也是12吧。。。)
for(i=0;i<len;i++) //接下来的过程,不要怀疑.经过验证了的
{ //(如果这个n进制的数能取余n-1等于0,则这个数的各个位数相加也要能取余n-1等于0,这样问题变简单咯)[这个很容易证明的,不妨试试]
if (a[i]>='0'&&a[i]<='9')
{
if (a[i]-'0'>max) max=a[i]-'0';
s=s+a[i]-'0';
}
if (a[i]>='a'&&a[i]<='z')
{
if (a[i]-'a'+36>max) max=a[i]-'a'+36;
s=s+a[i]-'a'+36;
}
if (a[i]>='A'&&a[i]<='Z')
{
if (a[i]-'A'+10>max) max=a[i]-'A'+10;
s=s+a[i]-'A'+10;
}
}
d=false;
for(i=2;i<=62;i++)
if (s%(i-1)==0&&max<i) {d=true;break;}
if (d) printf("%d\n",i);
else
printf("such number is impossible!\n");
}
return 0;
}