当前位置:编程学习 > C/C++ >>

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

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,