소수점 뒤에 양의 정수를 차례대로 붙여 나가면 아래와 같은 무리수를 만들 수 있습니다.
0.123456789101112131415161718192021...
이 무리수의 소수점 아래 12번째 자리에는 1이 옵니다 (위에서 붉게 표시된 숫자).
소수점 아래 n번째 숫자를 dn이라고 했을 때, 아래 식의 값은 얼마입니까?
d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000
일단..
무리수라는건 신경쓰지 않고 단순히 숫자를 string으로 붙여나가서면서
원하는 index를 찾아서 계산하였다. 답변 스레드를보니 자리수에 해당하는 수를
가져오는 공식도 있는듯 하다.
처음에는 그냥 0~ 1000000 (index를 맞춰주기 위해서 0부터 돌림)까지 돌려보았는데
python이나 perl에 비해서 ruby가 속도가 엄청나게 느리다.
인터프리터마다 특성이 좀 있는듯...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
s="" | |
for n in range(0, 300000): | |
s=s+str(n) | |
if (len(s) > 1000000): | |
break | |
r = int(s[1]) * int(s[10]) * int(s[100]) * int(s[1000]) * int(s[10000]) * int(s[100000]) * int(s[1000000]) | |
print(r) |
Ruby
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
s="" | |
(0..300000).each do |n| | |
s=s+n.to_s() | |
if (s.size > 1000000) | |
break | |
end | |
end | |
puts s | |
r=s[1].to_i * s[10].to_i * s[100].to_i * s[1000].to_i * s[10000].to_i * s[100000].to_i * s[1000000].to_i | |
puts r |
Perl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
my $s = ""; | |
foreach my $n ((0..300000)) { | |
$s=$s.$n; | |
if (length $s > 1000000) { | |
last; | |
} | |
} | |
my @l = split //, $s; | |
my $result = $l[1] * $l[10] * $l[100] * $l[1000] * $l[10000] * $l[100000] * $l[1000000]; | |
print "$result \n"; |
perl은 계속 결과가 0이 나와서 한참을 디버깅하였는데 결국 원인은 $l을 $1로 써서..아놔.... 변수명 잘 지읍시다...ㅠㅠ