c-奇怪的编译问题


#include    <stdlib.h>
#include    <math.h>
#include    <stdio.h>
int rev (int N);
int rev(int N){
return ((N <= 9)) ? N : rev(N / 10) + ((N % 10) * (pow(10, (floor(log10(abs(N))))))) ;
}
int main(void){
int r, n;
scanf("%d", &n);
r = rev(n);
printf("%d %d", r, n);
return EXIT_SUCCESS;
}

一个简单的代码,只是为了找出一个数字的倒数。一切都很好。直到我输入一个超过2位数的数字。事情表现得很奇怪,不知怎么的,最后一个数字总是倒过来的数字的0。我在在线编译器中检查过,那里的东西表现得很好。然而,当我在自己的机器上运行代码时,问题就出现了。我和MINGwWindows 10上。你们能给我一个解决方案吗。我以前遇到过存储在int矩阵中的值变为巨大值的问题,由于int的大小,这实际上是不可能存储在其中的。

使用pow和floor函数,使用float并不总是符合您的期望。

如前所述,使用整数。

建议一个数字一个数字地做这件事,并坚持使用整数。关于rev((函数的建议:

int rev(unsigned int N)
{
unsigned int res = 0;
while(N>0)
{
// pick off lowest digit
unsigned int digit = N%10;
// put into result, moving up all previous digits by doing *10
res = 10*res+digit;
// remove this digit from input value
N/=10;
}
return res;
}

相关内容

  • 没有找到相关文章

最新更新