算法入门经典 7.1.4 (双基回文数)

时间:2021-09-24 10:57:42

代码:

#include <stdio.h>
#include <string.h>
int fun(int x,int n) //将十进制的x转化为n进制,判断是否为回文数
{
int a[100],b[100];
int k=0;
for(int i=0;;i++)
{
a[i]=x%n;
x=x/n;
if(x==0) break;
}
k=i;
int j;
for(j=k,i=0;j>=0;i++,j--)
b[i]=a[j];
b[k+1]='\0'; //求出x的n进制数
int flag=1;
for (i=0;;i++)
{
if(i>(k/2)) break;
if (b[i]!=b[k-i])
{
flag=0;break;
}
}
if(flag) return 1; //是n进制的回文数
else return 0; //不是
}
int main()
{
int n,k,flag,i;
while (scanf("%d",&n)==1)
{
for(;;n++) //枚举,找出最小的
{
k=0;
flag = 0;
for(i=2;i<=10;i++)
{
if(fun(n,i)) k++;
if(k>=2){flag=1; break;}
}
if(flag){ printf("%d\n",n); break;}

}
}
return 0;
}