题目描述: 一个考古学家正在发掘古代的一座城市时,不小心被一个部分毁坏的石墙绊倒了。那个石墙上有数行奇异的数。这些数的前几位完整无缺,但不幸地,其余位的数字由于侵蚀作用而无法辨认。尽管如此,他注意到每一行完好的数字都像是2的幂的前几位,他就猜想这个石墙上原先的所有数都是2的幂。
验证自己的想法,他选择了能看清楚的一些数写成列表,并把列表交给你,请你求出最小的2的幂使幂的前若干位与他提供的列表中的数一致。所以你必须写一个
程序,对于给定的整数N(1 <= N <= 100),求出最小的指数E使这个数的前若干位与N相同。
注意:N的长度必须小于2^E的长度的一半。如N=1,当E等于4时,虽然2^4=16,
但因为1的长度等于16的长度的一半,所以不满足题上的条件,而只有在E等于7时,2^7=128才满足题意。
因此,N = 1时, 输出7
示例: 输入: N = 1 输出: 7
分析: 对于这个问题,直接使用模拟的方式进行模拟就好。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
N = str(N)
i = 0
while True:
i += 1
# 做 2 的 多少次幂啥的
mi = 2 ** i
# 然后将这个数转化成一个字符串
sm = str(mi)
# 然后判断长度是否符合要求
if len(sm) <= len(N) * 2:
continue
# 再检查,开头是否包含其子串。
if sm.startswith(N):
break
print(i)