在写判断一个区间中回文素数的个数。但是调用函数后发现不对函数单个测试都可以一旦判断就不行。就想加入printf单独看一下函数的输出值。结果发现最后得到的结果发生了改变
#include<stdio.h>
int huiwen(int n)
{
if(n==0)
{
return 1;
}
else{
int y=n,s;
while(n!=0)
{
s=s*10+n%10;
n=n/10;
}
if(s==y)
return 1;
else
return 0;
}}
int prime(int n)
{
int s;
if(n<=1)
return 0;
for(s=2;s*s<=n;s++)
{
if(n%s==0)
break;
}
if(s*s<=n)
return 0;
return 1;
}
int main()
{
int l,r,i,p,q;
while(scanf("%d%d",&l,&r)!=EOF)
{
for( ;l<=r;l++)
{
p=huiwen(l);
q=prime(l);
if(p==1&&q==1)
{
i++;
}
}
printf("%d\n",i);
}
return 0;
}
不加入printf正常输出也可以。
修改处见注释,供参考:
#include<stdio.h>
int huiwen(int n)
{
if (n == 0)
{
return 1;
}
else {
int y = n, s = 0;//修改
while (n != 0)
{
s = s * 10 + n % 10;
n = n / 10;
}
if (s == y)
return 1;
else
return 0;
}
}
int prime(int n)
{
int s;
if (n <= 1)
return 0;
for (s = 2; s * s <= n; s++)
{
if (n % s == 0)
return 0;//break; 修改
}
//if (s * s <= n) 修改
// return 0;
return 1;
}
int main()
{
int l, r, i, p, q;
while (scanf("%d%d", &l, &r) != EOF)
{
for (i=0; l <= r; l++) //修改
{
p = huiwen(l);
q = prime(l);
if (p == 1 && q == 1)
{
i++;
}
}
printf("%d\n", i);
}
return 0;
}
第9行的s应该初始化为0
第29行可以直接return 0,不需要break
32-34直接改成return 1;
第42行,增加i=0;对于每组测试数据,i应该初始化为0,不然就是累加了