题目描述
n=∑ki=0ai⋅bi,b≥2,如果i>0时,ai>ai−1,那么我们称这个数n是在b进制下是单调的。比如6,在3进制下为20(3),所以6在3进制下是单调的。现在已知n,求最小的基b,使得n是单调的。
输入
第一行是一个整数T(1≤T≤10000),表示样例的个数。 每行一个整数n,2≤n≤109。
输出
依次每行输出一个样例的结果。
样例输入
2 2 1000000000样例输出
2 32
解题思路:一切都在代码里
AC代码:
#include <stdio.h>
int main()
{
int T,n,b,pn,tag1,tag2;
scanf("%d",&T);
while ( T --)
{
b = 2; // 从最小的2进制开始判断
scanf("%d",&n);
while (1)
{
pn = n, tag1 = tag2 = -1; // tag1 记录高位, tag2 记录低位
while (pn)
{ // b = a(i)a(i-1)a(a-2)·····a(2)a(1)a(0)
tag1 = pn%b; // 因为这么算,是先得到低位a0—>a1—>a2····
if ( tag1 <= tag2) break; // 所以当 高位小于 低位时,条件不成立
pn /= b;
tag2 = tag1;
}
if (pn==0) break;
b ++;
}
printf("%d\n",b);
}
return 0;
}