debugging - r - Project Euler 40: getting the final digit wrong -
an irrational decimal fraction created concatenating positive integers:
0.123456789101112131415161718192021...
it can seen 12th digit of fractional part 1.
if dn represents nth digit of fractional part, find value of following expression.
d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000
problem source here.
i wrote following code calculate digits:
ans = data.frame(matrix(ncol = 6, nrow=2)) colnames(ans) = c(10,100,1000,10000,100000,1000000) rownames(ans) = c("length","number") counter = 1 for(i in c(10,100,1000,10000,100000,1000000)) { c = 0 num = 0 while (c<i) { num = num + 1 c = c + nchar(as.character(num)) } ans[1, counter] = c ans[2, counter] = num counter = counter + 1 } the output, is:
> ans 10 100 1000 10000 1e+05 1e+06 length 11 101 1002 10001 100004 1000004 number 10 55 370 2777 22222 185185 in other words, when irrational number 11 digit long, final 2 digits 10, means 10th digit 1. when irrational number 1002 digits long, final 3 digits 370, means 1000th digit 3. , on.
from this, answer is: 1 * 1 * 5 * 3 * 7 * 2 * 8. however, correct answer 1 * 1 * 5 * 3 * 7 * 2 * 1. beats me how able produce correct answers until final digit.
your method gives correct answer if force calculations integer arithmetic - add l numbers: c=0l, num=num+1l, etc.
it goes wrong @ point num=100000 , c=488894 or 488895. without integer arithmetic, using character string "1e+05" instead of "100000", 1 character shorter. 100001 , later not affected. setting options(scipen=99) stop doing this.
Comments
Post a Comment