问题:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
输入: 123
输出: 321
解答:
class Solution {
public int reverse(int x) {
long s=0;
while(x-x%10!=0)
{
s=s*10+x%10;
x=(x-x%10)/10;
}
s=s*10+x;
return s<-2147483648||s>2147483647?0:(int)s;
}
}
有个很大的问题是题目中又“我们的环境只能存储得下 32 位的有符号整数”这一条件,而long型又违反题目的嫌疑。
三目运算符,语法形式:布尔表达式 ? 表达式1 :表达式2。可以节约代码量。
贴几个个人认为值得记录的答案:
C语言,来源:评论区,止于至善
int reverse(int x)
{
int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
long rs = 0;//用long类型判断溢出
for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}
{
int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
long rs = 0;//用long类型判断溢出
for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}
Java 来源:评论区,笑容
public int reverse(int x) {
String xString = Integer.toString(x);
String xString = Integer.toString(x);
//Interger.toString(1) 是把数字用字符串的形式表示出来
String string = xString;
int flag = 1;
if (x < 0) {
flag = -1;
string = xString.substring(1);
}
try {
return Integer.valueOf((new StringBuilder(string)).reverse().toString()) * flag;
}catch (Exception e){
return 0;
}
}
String string = xString;
int flag = 1;
if (x < 0) {
flag = -1;
string = xString.substring(1);
}
try {
return Integer.valueOf((new StringBuilder(string)).reverse().toString()) * flag;
}catch (Exception e){
return 0;
}
}
这个是将数字转化为字符串处理,并用异常来判断溢出。