函数回文素数(求错误点)

img


#include
int fact(int n)
{
    int i;
    if(n<2)return 0;
    for(i=2;i*i<=n;i++)
    if(n%i==0)return 0;
    return 1;
}
int fbct(int n)
{   int s=0;
    while(n>0){
        s=s*10+n%10;n/=10;
    }if(s!=n)return 0;
else    return 1;
}
int main()
{
    int m,n,i,d=0;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {if(fact(i)&&fbct(i))d++
    ;}printf("%d",d);
    return 0;
}

回文素数,求错误点,不知道哪错了

回文函数错误。n都被你while循环改成0了啊,if(s!=n)肯定不对了啊。在while循环前,加个int m=n;最后if(s!=m) return 0

应该是判断回文数那里,if(s!=n)return 0; 这里的n被除为0了,所以导致条件不满足,从而判断出错,在改变n之前用一个临时变量存储n即可,修改如下:


#include<stdio.h>
int fact(int n)
{
    int i;
    if(n<2)return 0;
    for(i=2;i*i<=n;i++)
    if(n%i==0)return 0;
    return 1;
}
int fbct(int n)
{   int s=0;
    int temp=n;
    while(n>0){
        s=s*10+n%10;n/=10;
    }
    //printf("s=%d,n=%d\n",s,n) ;
    if(s!=temp)return 0;
    else    return 1;
}
int main()
{
    int m,n,i,d=0;
    scanf("%d %d",&m,&n);
    for(i=m;i<=n;i++)
    {
        if(fact(i)&&fbct(i)){
        //    printf("i=%d\n",i);
            d++;
        }
            
    }
    
    printf("%d",d);
    return 0;
}


img