c语言求最小双基回文数,C语言 双基回文数

该博客探讨了如何寻找在两种及以上进制下表示为回文数的整数,即双基回文数。程序实现了从0到1000000之间的搜索,并展示了一个C语言编写的算法,用于检查一个数是否为双基回文数。博客还包含了示例代码,解释了如何通过遍历不同进制来验证数字的回文特性。
摘要由CSDN通过智能技术生成

答案:#include

#include

int TS(long int x)

{

long int b,n;

int i,j,k;//不必定义为long

int jinz;

int z,y,a[21];//1000000的十进制数转为二进制有20位,数组不用定义很大

z=0;

for(jinz=2;jinz<=10;jinz++)//变量i在里面有使用,这里需换用变量jinz

{

j=0;

y=0;

b=x;//要保持x值

do

{

n=b/jinz;

a[j]=b%jinz;

j++;

b=n;

}while(n!=0);

for(i=0,k=j-1;i=0;i++,k--)

{

if(a[i]==a[k])//条件判断用“==”

y++;

}

if(y==j)//条件判断用“==”

z++;

}

if (z>=2)

return 1;

else

return 0;

}

long int main(int argc, char *argv[])

{

long int s,p;

int q;

printf("shu ru s ∈[0,1000000]\n");

scanf("%ld",&s);

q=0;

p=s+1;

while(q<1&&p<=1000000)//加入条件p<=1000000,防止死循环

{

if(TS(p))

q=q+1;

else

p=p+1;

}

if(p>1000000)

printf("FAILURE!");//增加检测失败提示

else if(q>=1)

printf("%ld\n",p);

system("PAUSE");

return 0;

}

鉴定完毕。其他:不能太贪心,一个一个进制地判断,不要过度嵌套!;

双基回文数

如果一个数正着读和反着读都是一样的,那么我们就称为是回文数,例如 1213121。

如果一个数在至少两种进位制(二进制到十进制)下的表示是回文数,我们就称之为双基回文数。例如495的二进制表示是111101111,八进制表示是757,这两种进制下的表示都是回文数,所以495就是一个双基回文数。

#include

#include

int fun(int n,int m)//n是要判断的数,m为进制

{

long i,j,temp=n,a[32]

;

for(i=0;i<32;i++)

{

if(temp==0)

break;

a[i]=temp%m;

temp=temp/m;

}

i--;

j=i;

for(i=0;i<=(j+1)/2;i++)

if(a[i]!=a[j-i])

return 0;

return 1;

}

int main()

{

long i,j,s,count=0;

printf("shu ru s ∈[0,1000000]\n");

scanf("%ld",&s);

for(i=s;i<2147483646;i++)

for(j=2;j<=10;j++)

{

count+=fun(i,j);

if(count>=2)

break;

}

if(i<2147483646&&count>=2)

printf("%ld",i);

else

printf("not found");

getchar();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值