在不使用额外空间的情况下确定整数是否为回文

时间:2012-03-07 22:46:50

标签: c

我编写了以下函数,用于在不需要任何额外空间的情况下查找整数是否为回文:

int isPalindrome(int x) 
{
    int i=0,j,y,z;
    if(x<0)
        return 0;
    for(i=0;;)
    {
        if((**y**=x/pow(10,i)) > 0)      //Variable 'y' here
        {
            i++;
        }
        else 
            break;
    }
    printf("i=%d\n",i);

    for(;i>0;)
    {
        if(x%10!=(**z**=x/pow(10,i-1)))     //variable 'z' here
        {
            return 0;
        }
        else
        {
            x=x%(int)pow(10,i-1);
            x=x/10;
            i=i-2;
        }
    }
    return 1;
}

这里返回1表示它是回文,0表示不是。

但是我发现当我从代码中的语句中删除变量 y z 时,代码不能提供所需的结果。它背后可能是什么原因?

1 个答案:

答案 0 :(得分:2)

当删除的变量y或z比表达式类型从int更改为double。

  • 表达式'x / pow(10,i)'的类型是双
  • 表达式'y = x / pow(10,i)'的类型是int

  • 'z = x / pow(10,i-1)' - int

  • 'x / pow(10,i-1)' - double