B2136 素数回文数的个数

问题遇到的现象和发生背景

img

img

我感觉应该是回文数判断呢写错了,但是不知道错在哪。

用代码块功能插入代码,请勿粘贴截图
#include 
int f(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(n%i==0);
        return 0;
    }
    return 1;
}
int z(int x)
{
    int y=0;
    while(x>=0)
    {
        y=y*10+x%10;
        x/=10;
    }
    if(y==x)
    return 1;
}
int main ()
{
    int n,sum=0;
    scanf("%d",&n);
    for(int i=11;i<=n;i++)
    {
        if(f(i)&&z(i))
        sum++;
    }
    printf("%d",sum);
    return 0;
}

#include<stdio.h>
 
int prime(int i);        //判断素数的函数
int palindrome(int i);  //判断回文数的函数
 
int main()
{    int n;                //单纯求1000内回文素数可将前三行删去,将第五行的n改为1000.
    printf("请输入需要多少以内的回文素数\n");
    scanf("%d",&n);
    printf("该范围内的回文素数如下:\n");
    for(int i=11;i<n;i++)
    {
        if(prime(i)&&palindrome(i))             
            {
             
                    printf("%d\n",i);    //输出该回文素数
             
            }
    }
        return 0;
}
 
int prime(int i)    //判断素数的函数
{    
    int j = 2;
    for(j;j<i;j++)    
    {
        if(i%j==0)  //如果j能被小于j的数整除,则返回false 0;
        {
            return 0;
        }
        else        //初学者用这个判断简单易懂,如果想要了解更多可以看
        {            //博主关于判断素数的文章
            return 1;
        }
    }
}
int palindrome(int i)
{
    int x,y;
    int z = 0;
    x=i;
    while(i!=0)        //对数进行倒转如:将123倒转为321
    {
        y=i%10;      //获得i的末位数
        z=z*10+y;    //每次自乘十后加末位数
        i /= 10;    //每次自除十舍弃末尾数
    }
    if(x==z)        //判断倒转后是否等于原数,即是否为回文数
    {            
        return 1;    //是则返回真1,否则返回假0;
    }
    else
    {
        return 0;
    }
}

if(n%i==0); 第6行,最后的分号删掉!!!
另外z函数最后应该加上return 0;否则y不等于x时,没有返回值了