#include <stdio.h> #include <limits.h> //判断当前加法是否溢出 bool IsOverflow(int n, int a, int b) { if ((b > 0 && n > a) || (b <= 0 && n <= a))// 未溢出 return true; else return false; } //判断当前乘法是否存在溢出 bool Multiple(int nSrc, int nMulti, int& nResult) { if (nMulti <= 0) return 0; nResult = nSrc; for (int i = 0; i < nMulti - 1; ++i) { if (IsOverflow(nResult + nSrc, nResult, nSrc)) nResult += nSrc; else return false; } return true; } int reverse(int i_source) { int i_dest=0; int flag=0; if(i_source<0) { i_source = -i_source; if (i_source < 0) { printf("Overflow:The absolute value of this integer is greater than the maximum value of integer/n"); return -1; } flag=1; } bool bOverflow = false; int n1 = 0, n2 = 0; while(i_source>0) { if (Multiple(i_dest, 10, n1) == false) { printf("Overflow On Multiple, break!/n"); return -1; } n2 = i_source % 10; i_dest = n1 + n2; bOverflow = IsOverflow(i_dest, n1, n2); if (bOverflow == false) { printf("Overflow On add, break!/n"); return -1; } else { //printf("%d = %d * %d/n", i_dest, n1, n2); } i_source=i_source/10; } if(flag) { i_dest=-i_dest; } return i_dest; } int main() { int n[10]; n[0] = INT_MAX, n[1] = INT_MAX + 1, n[2] = INT_MAX - 1; n[3] = INT_MIN, n[4] = INT_MIN + 1, n[5] = INT_MIN - 1; n[6] = -1, n[7] = 0, n[8] = 1; for (int i = 0; i < 10; ++i) { printf("%d/n", reverse(n[i])); } return 0; }