我编写了以下函数,用于在不需要任何额外空间的情况下查找整数是否为回文:
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 时,代码不能提供所需的结果。它背后可能是什么原因?
答案 0 :(得分:2)
当删除的变量y或z比表达式类型从int更改为double。
表达式'y = x / pow(10,i)'的类型是int
'z = x / pow(10,i-1)' - int