C 了解所有汇文号码的程序不';工作不好

C 了解所有汇文号码的程序不';工作不好,c,C,这个程序是为了知道从1到256的所有汇文数而编写的 像11^2=121,所以11是回文。 实际上我有一个很好的 但我不明白为什么这个程序不能很好地工作 #include<stdio.h> int is_huiwen(int l) { //DON'T WORK?WHY? int number[20]={0}; int i,j,k; int f=l*l; for(j=0;f;j++) { number[j]=f%10

这个程序是为了知道从1到256的所有汇文数而编写的

像11^2=121,所以11是回文。

实际上我有一个很好的
但我不明白为什么这个程序不能很好地工作

#include<stdio.h>


int is_huiwen(int l)
{
     //DON'T WORK?WHY?
    int number[20]={0};
    int i,j,k;
    int f=l*l;

    for(j=0;f;j++)
    {
        number[j]=f%10;
        f/=10;
    }

    for(k=0;j-k>0;k++,j--)
    {
        if(number[j]!=number[k] )
        {
            return 0;
        }
    }

    return 1;


    /* this is ok
    int y=0;
    int t = l*l;
    int x = t;
    do
    {
        y=y*10+t%10;
        t /= 10;    
    }
    while(t);

    if(x==y)
    return 1;
    else
    return 0;
    */
}

int main()
{
    int i;
    int flag;
    for(i=0;i<256;i++)
    {      
        flag=is_huiwen(i);
        if(flag)
        {
        printf("%d is huiwen",i);   
        }
        else
        {
        printf("\n");   
        }
    }
    printf("end\n\n\n\n");
    return 0;
} 
#包括
int是_huiwen(int l)
{
//不工作?为什么?
整数[20]={0};
int i,j,k;
int f=l*l;
对于(j=0;f;j++)
{
数量[j]=f%10;
f/=10;
}
对于(k=0;j-k>0;k++,j--)
{
如果(数字[j]!=数字[k])
{
返回0;
}
}
返回1;
/*这没关系
int y=0;
int t=l*l;
int x=t;
做
{
y=y*10+t%10;
t/=10;
}
while(t);
如果(x==y)
返回1;
其他的
返回0;
*/
}
int main()
{
int i;
int标志;
对于(i=0;i而言,错误是BluePixy指出的
if(number[j]!=number[k])

如果(数字[j-1]!=数字[k]),则更正为

我想指出的是,代码隐藏了这个问题,部分原因是只有一个字母的变量名和不一致的命名

下面是我用来寻找相同解决方案的代码

int is_huiwen_2(int L )
{
    int ret = 1;
    int j = 0;
    int k = 0;
    int t = L * L;
    int number[8] = { 0 };

    for( j = 0; t; j++)
    {
        number[j] = t % 10;
        t /= 10;
    }

    for( k = 0; (j - k) > 0 && ret; k++, j-- )
    {
        if( number[j-1] != number[k] )
        {
            ret = 0;
        }
    }
    return( ret );
}

int is_huiwen_1( int L )
{
    int ret = 1;
    int y = 0;
    int t = L * L;
    int x = t;

    do
    {
        y = y * 10 + t % 10;
        t /= 10;
    }
    while( t );

    if( x != y )
    {
        ret = 0;
    }
    return( ret );

}

int main()
{
    int i = 0;
    int flag = 0;

    for( i = 0; i < 256; i++)
    {
        flag = is_huiwen_1(i);

        if(flag)
        {
            printf("1: %d is huiwen\n",i);
        }
    }

    for( i = 0; i < 256; i++)
    {
        flag = is_huiwen_2(i);

        if(flag)
        {
            printf("2: %d is huiwen\n",i);
        }
    }

    printf("end\n");

    return( 0 );
}
虽然这可能是一个简单的练习,但如果这不是一个琐碎的练习,那么它预示着将来会出现更大的问题。尽量不要让下一个程序员感到困难


请记录你的算法、算术和变量。

if(number[j]!=number[k])
-->
if(number[j-1]!=number[k])
慧文数是什么?你是在问为什么
int number[20]={0}
不起作用?可能是因为使用了不理解C99或C11的旧编译器。出现了什么问题?预期的行为是什么?谢谢大家,很抱歉没有注意到。我会仔细查看。
// A Huiwen number looks like this "12321", "1589851"