Consider the following decimal irrational number obtained by concatenating positive integers in order:
0.123456789101112131415161718192021...
The 12th decimal place is 1.
Represent the nth decimal place with dn. Find d1 x d10 x d100 x d1000 x d10000 x d100000 x d1000000
.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2040
From the number of digits of each number, which digit is which number can be obtained ...
However, it became annoying, and after simply combining each number as a character string, the specified number of digits of the generated character string was calculated.
def main():
ans = 1
ls = ''.join([str(i) for i in range((10**5)*2)])
for d in [10**j for j in range(7)]:
ans *= int(ls[d])
print ans
main()
I tried using log. I thought this would save memory, but it didn't work due to a log bug. It took me about an hour to identify this bug.
from math import log
def main2():
digits = [10**i for i in range(7)]
N = 10
ans = 1
s = 0
i = 1
while digits:
s += int(log(i,N))+1
if s >= digits[0]:
ans *= int(str(i)[digits.pop(0)-s-1])
i+=1
print ans
main2()
log bug http://bugs.python.org/issue3724
>>>log(1000,10)
2,9999999999999996
Recommended Posts