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

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

代码:

#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;
}