C语言 输出m,n之间全部回文素数,5 <=am< n<= 100,000)我写的程序错在哪了?

#include <stdio.h>
int flag,x;
int HW(int);
int isPrime(int);
int HW(int x){
int num,s,y=0;
scanf("%d", &num);
s=num;
while(s>0){
y=y*10+s%10;
s=s/10;
}
if(y==num){
flag=1;
}else{
flag=0;
}
}
int isPrime(int x)
{
int i;
if(x<=1) return 0;
for(i=2;i<x;++i)
if(x%i==0) flag=1;
flag=0;
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
for(x=m;x<=n;x++) {
if(flag==1) printf("%d\n",x);
}
return 0;}

错的地方都作了更改:
#include <stdio.h>
int isPrime(int);
int HW(int x)
{ int s,y=0;
  s=x;
  while(s>0)
  { y=y*10+s%10;
    s=s/10;
  }
  if(y==x)
  { return 1;
  }
  else
  { return 0;
  }
}
int isPrime(int x)
{ int i;
  if(x<=1) return 0;
  for(i=2; i<x; ++i)
    if(x%i==0) return 0;
  return 1;
}
int main()
{ int m,n,x;
  scanf("%d%d",&m,&n);
  for(x=m; x<=n; x++)
  { if(isPrime(x) && HW(x)) printf("%d\n",x);
  }
  return 0;
}

追问

谢谢你 为什么在第二行先定义flag和x就无法输出呢?

还有一个问题 if(a==b|b<a)是什么意思

追答

在第二行先定义flag和x也是可以的。不过你没有调用就判断(当然就不能判断了)。

在这个问题中,采用直接返回的方法更为简便和容易理解。
if(a==b||b<a)的意思是,如果a等于b,或者b<a

追问

中间只有一个|

不是或者

追答

if(a==b|b<a)------一个|是按位或,因为参与运算的两个数都是0或1,本身只有一位,所以与逻辑或||的作用是完全相同的。
等价于
if((a==b)|(b<a))

if(a==b||b<a)
的作用完全一样

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-12-06
#include <stdio.h>
bool HW(int x)
{
int s,y=0;
s=x;
while(s>0)
{
y=y*10+s%10;
s=s/10;
}
if(y==x) return true;
else return false;
}

int main()
{
int m,n,e;
printf("Pls Put in the value of m and n:\n");
scanf("%d%d",&m,&n);
if(m>n)
{
e=n;
n=m;
m=e;
}
printf("%d 到 %d 的回文数为:\n",m,n);
for(int x=m;x<=n;x++)
{
if(HW(x)) printf("%d\n",x);
}
return 0;
}
你的代码混乱,函数没有返回值,主函数没有调用函数,好好理解下函数吧追问

if(a==b|b<a)是什么意思

追答

#include
bool HW(int x)
{
int s,y=0;
s=x;
while(s>0)
{
y=y*10+s%10;
s=s/10;
}
if(y==x) return true;
else return false;
}
bool isPrime(int x)
{
int i;
if(xn)
{
e=n;
n=m;
m=e;
}
printf("%d 到 %d 的回文数为:\n",m,n);
for(int x=m;x<=n;x++)
{
if(HW(x))
if(isPrime(x)) printf("%d\n",x);
}
return 0;
}

相似回答