Betrachten Sie die folgende irrationale Dezimalzahl, die durch Verketten positiver Ganzzahlen in der angegebenen Reihenfolge erhalten wird:
0.123456789101112131415161718192021...
Die 12. Fraktion ist 1.
dn stellt die n-te Ziffer des Bruchs dar. Finden Sie "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
Aus der Anzahl der Ziffern jeder Nummer kann ermittelt werden, welche Ziffer welche Nummer ist ...
Es wurde jedoch ärgerlich, und nachdem einfach jede Zahl als Zeichenfolge kombiniert wurde, wurde die angegebene Anzahl von Ziffern der generierten Zeichenfolge berechnet.
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()
Ich habe versucht, log zu verwenden. Ich dachte, dies würde Speicherplatz sparen, aber es funktionierte aufgrund eines Protokollfehlers nicht. Es dauerte ungefähr eine Stunde, um diesen Fehler zu identifizieren.
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()
Protokollfehler http://bugs.python.org/issue3724
>>>log(1000,10)
2,9999999999999996
Recommended Posts