C语言 双基回文数
输入一个正整数s ,s<=10^6,求比s大的数中,最小的双基回文数
我写的,菜鸟的很,见笑了,但是....帮我改改吧~!!!
#include <stdio.h>
#include <stdlib.h>
int TS(long int x)
{
long int i,j;
int z,y,k,n,a[1000];
z=0;
for(i=2;i<=10;i++)
{j=0;
n=1;
y=0;
while(n>0)
{n=x/i;
j=j+1;
a[j]=x%i;
x=n;
}
for(i=1,k=j;i<=j,k>=1;i++,k--)
{if(a[i]=a[k])
y=y+1;
}
if(y=j)
z=z+1;
}
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)
{
if(TS(p))
q=q+1;
else
p=p+1;
}
printf("%ld",p);
system("PAUSE");
return 0;
}
答案:#include <stdio.h>
#include <stdlib.h>
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<j,k>=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 <stdio.h>
#include <stdlib.h>
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;
}
上一个:C语言问题
下一个:main() { int a='A',b; char c=97; b=c-32; printf("%d%c\n",b,b); printf("%d%c\n",a,,a); } 65 A 65A