选了个先转换成字符串,然后再翻转的做法,虽然效率不差,但属实有点拉,贴代码
class Solution { public: char* inttoString(int a,char* b) { int t = a/10; if(t!=0) { b = inttoString(a/10,b) +1; } *b = a%10 + ‘0‘; return b; } int reverse(int x) { if(x == -2147483648) return 0; bool fu = false; // long t = x; if(x<0) { fu = true; x = -x; } char a[20]; memset(a,‘\0‘,sizeof(a)); inttoString(x,a); int i = 0; while(a[i]!=‘\0‘) { i++; } long k = 0; for(int j = i-1 ; j>=0 ; j--) { k = (a[j]-‘0‘) + k*10; if(k>(pow(2,31)-1)) return 0; } if(fu) k = -k; return k; } };
还有一种方法,直接通过取余的方式求出当前最小一位数,然后将x除以10,算是比较巧妙的方法,就是两个边界条件,需要进行计算,贴代码
class Solution { public: int reverse(int x) { int rec = 0; while(x!=0) { int pop = x%10; x = x/10; if(rec>INT_MAX/10 || (rec ==INT_MAX/10 && pop == 7 )) return 0; if(rec<INT_MIN/10 || (rec ==INT_MIN/10 && pop == -8 )) return 0; rec = rec*10 + pop; } return rec; } };
原文:https://www.cnblogs.com/zhaohhhh/p/14495776.html