用函数计算300内回文数,子函数哪里出错了?

int huiwen(long n)
{
int a,sum=0;
while(n>0)
{
a=n%10;
sum=sum*10+a;
n=n/10;}
if(sum==n)
return 1;
else
return 0;
}

int main(void)
{
long i;
for(i=1;i<=300;i++){
if(huiwen(i)&&huiwen(i*i))
printf("%ld\n",i);
}
return 0;
}

望采纳,代码的问题在于,在函数huiwen()中,比较的数是sum而不是原来的n,应该是这样:

int huiwen(long n)
{
    int a,sum=0;
    while(n>0)
    {
        a=n%10;
        sum=sum*10+a;
        n=n/10;
    }
    if(sum==n) // 这里应该比较sum和原来的n
        return 1;
    else
        return 0;
}

n都被你赋值成0了,它还能等于sum吗

直接return sum就可以,在主函数里判断是否等于i,修改的代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int huiwen(long n)
{
    long sum=0;
    while(n>0)
    {
        sum=sum*10+n%10;
        n=n/10;
    }
    return sum;

}

int main(void)
{
    long i;
    for(i=1;i<=300;i++){
        if(i==huiwen(i))
            printf("%d ",i);
    }
    return 0;
}