问题描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
方法一、
- 将int转换成string后,翻转;
- 做相应判断以及是否溢出;
- 将string型转换成int,最后输出;
code:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = str(x) #把数值型x变成字符串
reverse_x = []
for i in range(len(x)):
reverse_x.append(x[(-1)-i])
if reverse_x[0] == '0' and len(reverse_x) > 1:
a = reverse_x.remove(reverse_x[0])
tmp_reverse = reverse_x[0]
if reverse_x[-1] != '-':
for i in range(1, len(reverse_x)):
tmp_reverse = tmp_reverse + reverse_x[i]
final_reverse = int (tmp_reverse)
if final_reverse < 2147483647 and final_reverse > -2147483648:
return final_reverse
else:
return 0
else:
for i in range(1, len(reverse_x)-1):
tmp_reverse = tmp_reverse + reverse_x[i]
final_reverse = -(int (tmp_reverse))
if final_reverse < 2147483647 and final_reverse > -2147483648:
return -(int(tmp_reverse))
else:
return 0
需要注意的是:
在计算机中,所有的数据都是以二进制方式存储的。所说的32位整数,同样说的是二进制值。对于32位整数,可以表示的范围为-2147483648 ~ 2147483647。不超过32位整数,就是说数值是在这个范围内的。
方法二、C++code
算法
反转整数的方法可以与反转字符串进行类比。
我们想重复“弹出” x 的最后一位数字,并将它“推入”到 rev 的后面。最后,rev 将与 x 相反。
要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。
//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;
但是,这种方法很危险,因为当temp=rev⋅10+pop 时会导致溢出。
幸运的是,事先检查这个语句是否会导致溢出很容易。
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
};
这里对运算符: ‘/’, ‘//’, '%'要理解正确
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值为:", c
c = a - b
print "2 - c 的值为:", c
c = a * b
print "3 - c 的值为:", c
c = a / b
print "4 - c 的值为:", c
c = a % b
print "5 - c 的值为:", c
# 修改变量 a 、b 、c
a = 2
b = 3
c = a**b
print "6 - c 的值为:", c
a = 10
b = 5
c = a//b
print "7 - c 的值为:", c
输出结果:
1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2
注意:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。
>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5