这段代码没有给我正确答案,我找不到错误。我该如何修复代码?
场景:首先它确定数字的位数,然后回答数字。
#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();
}
答案 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! */