常见的逻辑题
常见的逻辑题
找个位数
- 一个数对 10 取余,得到的就是该数的个位数
- 一个数对 10 整除,就是减少数的大小
水仙花数
题目:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个 3 位数,该数字每个位上数字的立方之和正好等于它本身,例如:1^3 + 5^3+ 3^3=153
。
思路:
- 需要找到个位、十位和百位上的数字;
- 个位:对 10 取余,得到个位数的数字
- 十位:先整除 10 留下 2 位数,再对 10 取余,得到十位上的数字
- 百位:先整除 2 次 10,即 100,再对 10 取余,得到百位上的数字
- 个位、十位、百位上的数字相加 = 153 的就是水仙花数
Python 实现:
1
2
3
4
5
6
7
8
9
10
# 判断是否是水仙花数
for n in range(100, 1000):
# 取余得到个位数
low = n % 10
# 百位对10取整得到十位数,十位再取余得到十位数
middle = n // 10 % 10
# 百位对100取整得到百位数
high = n // 100
if n == low ** 3 + middle ** 3 + high ** 3:
print(n)
数字翻转
题目:正整数翻转,例如:将 12345 变成 54321
思路:
- 和水仙花数类型的思路,通过取余 10 得到当前树的个位数,再配合不停的整除 10,将数不断变小
- 将得到的个位数的值,逆序保存起来,得到的就是一个翻转后的数字
Python 实现:
1
2
3
4
5
6
7
8
9
num = 12345
## 逆序输出
reversed_num = 0
while num > 0 :
## 每次循环后,将当前reversed_num乘以10,往前进一位,再对10取余,添加到高位
reversed_num = reversed_num*10 + num%10
# 不断地取个位数,将num从低位到高位一个个数取出来,然后逆序追加到reversed_num
num //= 10
print(reversed_num)
本文由作者按照 CC BY 4.0 进行授权