题目描述
小明获得了一些密码的片段,包含0∼9,A∼F 这些字符,他猜这些是某个进制下的一个整数的数码串。 小明想知道从2到16进制中,哪些进制下,这个数码串的对应的十进制整数值,等于n?
输入
存在不超过1000个样例,每行一个样例。 每行包括两部分,数码串(串长不超过31),整数n(1≤n≤109)
输出
每行输出一个样例的结果。 如果存在多个解,输出最小的那个进制。 如果没有满足的进制,输出"Impossible"。
样例输入
F 15 F 14 23 11 25 13样例输出
16 Impossible 4 Impossible
解题思路:这题应该没什么难度。 看代码注释(其实不加第一个for循环也可以,直接从2进制查起,等进制转换的时候再处理字符,把它们转换成整数。)
AC代码:
#include <stdio.h>
#include <string.h>
int main()
{
int num[35];
int n,len,max,i,j;
char numstr[35];
while (scanf("%s %d",numstr,&n) != EOF)
{
__int64 ans = 0;
len = strlen(numstr), max = -1;
for ( i = 0; i < len; i ++)
{
if (numstr[i] <= '9') num[i] = numstr[i] - '0';
else num[i] = numstr[i] - 'A' + 10;
if ( max < num[i]) max = num[i]; // 最大的数为max,则进制最小为max+1.
}
for ( i = max+1; i <= 16; i ++) // 从最小进制查找起
{
ans = 0;
for ( j = 0; j < len; j ++)
ans = ans*i + num[j];
if (ans == n) break;
}
if (i <= 16) printf("%d\n",i);
else puts("Impossible");
}
return 0;
}