2017-06-03 78 views
-1
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位整數並檢查整數溢出條件的函數代碼。該代碼必須返回0以表示溢出情況,否則返回的數字。對於輸入2147483647(INT_MAX),我仍然得到輸出-1126087180,實際上它應該是零。請任何人都可以幫忙。 謝謝如何檢查c中的32位有符號整數的整數溢出

+1

也許你可以存儲導致'int64_t'和使用口罩,檢查溢出 – sstefan

+1

感謝u.it工作對我來說now.but什麼使用問題結果只要 –

+2

「LONG_MAX」是否大於「INT_MAX」是實現定義的(就像「INT64_MAX」是否大於這兩個值一樣)。 – EOF

回答

1

這是而不是混合不同的整數類型的版本。所有的計算都保存爲int。這樣你就不需要關心不同的整數類型的大小。

備註本部分僅處理x>=0

#include <stdio.h> 
#include <limits.h> 

int reverseNumber(int x){ 
    int result=0; 
    if (x < 0) 
    { 
     printf("This version requires x >= 0\n"); 
     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("%d\n", reverseNumber(INT_MAX)); 
    printf("%d\n", reverseNumber(2147483412)); 
    return 0; 
} 

輸出:

0 
2143847412 
相關問題