在c中找到一个数字的回文

时间:2012-09-30 15:22:31

标签: c palindrome

这段代码没有给我正确答案,我找不到错误。我该如何修复代码?

场景:首先它确定数字的位数,然后回答数字。

#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
    int number=42321,j=0,dig,temp;
    long long pal= 0LL;

    temp=number;     
    while(temp>0)
    {
          temp/=10;
          j++;
    }

    while (number>0)
    {          
          dig=number%10;
          pal+=dig*(int)pow(10,j);
          number/=10;
          j--;  
    }

    printf("%d",pal);
    getch();   
}

2 个答案:

答案 0 :(得分:3)

while(temp>0)
{
      temp/=10;
      j++;
}

您正在计算number具有的位数,这比最高幂10的指数不超过number。之后你需要递减j

但使用pow()并不是最好的方法,更好的是逐步构建反转数字:

while(temp > 0)
{
    pal = 10*pal + temp%10;
    temp /= 10;
}

答案 1 :(得分:2)

您将pal定义为long long。之后你骗了编译器告诉它你要传递int类型的值,但发送pal:类型为long long的值

    printf("%d",pal); /* WRONG */

不要那样做。 使用正确的转换说明符

    printf("%lld", pal); /* preferred */

或将值转换为正确的类型

    printf("%d", (int)pal); /* UGH! */