回文数
题目描述
回文数是指一个没有前导0的数,从左到右的数码和从右到左的数码是一样的。比如说10进制下的"121",这就是一个回文数。
我们将这个概念扩展到b进制,n=∑ki=0ai⋅bi,其中0≤ai<b,2≤b,ak>0,如果数列ak,ak−1,…,a0构成一个回文序列,那么就称n在b进制下是回文数。比如,5在2进制下是101(2),所以5在2进制下是回文数。
我们想知道n在b进制下为回文数时,最小的b是多少?
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
每个样例是一个十进制整数n(1≤n≤106)。
输出
依次每行输出一个样例的结果,为一个整数,表示b。
样例输入
2 5 6
样例输出
2 5
#include<stdio.h>
int judge(int x,int y)
{
int a[30],i,k,len=0;
for(i=0;x!=0;i++)
{
a[i]=x%y;
x/=y;
len++;
}
for(i=0,k=0;k<=len/2-1;k++)
{
if(a[i+k]!=a[len-1-k])
{
return 0;
}
}
return 1;
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
int n;scanf("%d",&n);
for(int b=2;;b++)
{
if(judge(n,b))
{
printf("%d\n",b);
break;
}
}
}
}
嗯。。挺简单的,自从我开始用函数。。使代码更具结构性,可读性,,以前是循环的神