来源
链接:https://www.nowcoder.com/questionTerminal/1a3de8b83d12437aa05694b90e02f47a?f=discussion
来源:牛客网
题目描述
将给出的整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321
你有思考过下面的这些问题么?
如果整数的最后一位是0,那么输出应该是什么?比如10,100
你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。
示例1
输入
-123
输出
-321
大佬解法
链接:https://www.nowcoder.com/questionTerminal/1a3de8b83d12437aa05694b90e02f47a?f=discussion
来源:牛客网
//本体关键点是如何判断溢出。
//推荐解答用的是用long类型存储结果,如果结果大于0x7fffffff或者小于0x80000000就溢出
//我的解法是每次计算新的结果时,再用逆运算判断与上一次循环的结果是否相同,不同就溢出
public int reverse(int x) {
int res=0;
while(x!=0){
//最后一位
int tail=x%10;
int newRes=res*10+tail;
//如果newRes-tail)/10!=res说明产生了溢出
if((newRes-tail)/10!=res)
return 0;
res=newRes;
x=x/10;
}
return res;
}
总结:关于数字的操作,通过取余,取整可以进行分解。