Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
题解:
首先肯定需要注意极端情况,也就是超过范围的数。(稍后解决)
首先想到的是先把正负用一个flag记下来。因为我想用的是string来做,把x的绝对值存到string,然后利用string的reverse函数进行反转,再变回int型,但这里,需要判断是否超出范围,若超出,返回0,若不超出,则带上符号输出。
首先在reverse这里我卡了很久,它报错参数数量不对,我翻了好久书发现没错啊,后来发现喔原来是它这个题本身定义reverse函数。。。 OJ提示我加上了::,通过了
在判断是否超出范围这里,我又卡了很久,因为它显示runtime error,本来以为可以转换成int后再判断,因为报错我干脆直接就用字符的个数及大小来比较了,最后通过了。
代码:
class Solution {
public:
int reverse(int x) {
bool flag;
x<0?flag=false:flag=true;
string s=to_string(abs(x));
cout<<s<<endl;
::reverse(s.begin(),s.end());
if(s.length()>=10&&((flag&&s>"2147483647")||(flag==false&&s>"2147483648"))) return 0;
int ans=stoi(s);
if(flag) return ans;
else return -ans;
}
};
在这个题里用到的很多函数我都不熟练,像是int ans=stoi(s), reverse(s.begin(),s.end()); s=to_string(x)这样都要返回去看书才能正确运用,之后要多多练习了。
看了一下大神的做法,啊哈,把reverse用到了极致,先判断首字符是否为-,若为-就reverse后面的,若不是就全reverse。用一个long long int型存储了翻转后的字符。(stoll()函数)判断是否超出范围,没超出的话 return (int) temp;
太厉害了。。。