python小技巧:取个十百千位;数字翻转
取个十百千位
def num_intract():
num = int(input("请输入四位数的数字:"))
a = num % 10
b = num // 10 % 10
c = num // 100 % 10
d = num // 1000
print(d, c, b, a)
num_intract()
数字翻转
如果反转后整数超过 32 位的有符号整数的范围:[−2^31, 2^31 − 1]如果反转整数溢出,就返回0。、
对于//,是向下取整,即不会进行四舍五入,这个需要注意。
精妙解法:
这个算法的思想就是:取绝对值计算,每次循环抽出个位数和剩下的部分,个位数*10往左进一位,每次循环的累加起来,判断是否超出边界。
res,y
3,12
32,1
321,0
def reverse_better(x: int) -> int:
y, res = abs(x), 0 # 取绝对值
print(y)
# 32位整数则其数值范围为 [−2^31, 2^31 − 1]
boundry = (1 << 31) - 1 if x > 0 else 1 << 31
# 1<<31 : 在十进制的1的二进制码后面添加31个0后表示的十进制的数是2147483648,恰好等于 2的31次方,减1后为2147483647,为32位有符号整数上限
print(boundry)
while y != 0:
res = res * 10 + y % 10
print(res)
if res > boundry:
return 0
y //= 10
print(y)
return res if x > 0 else -res
print(reverse_better(x=-123))
知识点补充:>>.<<
A>>B A的二进制码右移B位,二进制码去掉B位
3>>1 输出 1
bin(3):0b11
bin(1):0b1
即3的二进制码11去掉一位后位1,即是十进制的1
A >> B 即 A / (2 ** B)
A / (2 ** B): 可用于计算文件大小,比如2048B 的文件 2048 >> 10 结果2M 2048 / (2 ** 10) = 2
A<<B A的二进制码左移B位,A的二进制码后加B个0
3<<1 输出 6
bin(3):0b11
bin(6):0b110
A << B 即 A * (2 ** B)

浙公网安备 33010602011771号