int reverseNumber(int x){
long k = x;
long result=0;
int negative=0;
if (k < 0)
{
negative = 1;
k = 0 - k;
}
while (k != 0)
{
result = (result * 10) +( k % 10);
k /= 10;
}
if (result >INT_MAX)
return 0;
else
{
if (negative == 1)
return (0-(int)result);
else
return (int)result;
}
}
这是逆转32位整数并检查整数溢出条件的函数代码。代码必须返回溢出案例的代码,否则反向数字。对于输入2147483647(int_max(,我仍在获取输出 - 1126087180实际上应该为零。请任何人可以帮助您。 谢谢
这是一个版本,它不是混合不同的整数类型。所有计算均为int
。这样,您就不需要关心不同整数类型的大小。
NOTE 此部分仅处理x>=0
。
#include <stdio.h>
#include <limits.h>
int reverseNumber(int x){
int result=0;
if (x < 0)
{
printf("This version requires x >= 0n");
exit(1);
}
while (x != 0)
{
if (result > INT_MAX/10) // Check for overflow before multiplying
{
return 0; // Will overflow
}
result = 10 * result;
if (result > (INT_MAX - (x % 10))) // Check for overflow before adding
{
return 0; // Will overflow
}
result = result + (x % 10);
x /= 10;
}
return result;
}
int main(void) {
printf("%dn", reverseNumber(INT_MAX));
printf("%dn", reverseNumber(2147483412));
return 0;
}
输出:
0
2143847412