0

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

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

#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();   
}
4

2 回答 2

3

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

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

但是使用pow()不是最好的方法,更好的是逐步构造倒数:

while(temp > 0)
{
    pal = 10*pal + temp%10;
    temp /= 10;
}
于 2012-09-30T15:26:25.547 回答
2

你定义pallong long。之后你对编译器撒谎,告诉它你将传递一个类型的值int但发送pal:一个类型的值long long

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

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

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

或将值转换为正确的类型

    printf("%d", (int)pal); /* UGH! */
于 2012-09-30T15:31:51.990 回答