Dim digits(1000) As Integer
Dim numdigits As Integer
Dim i As Integer
Dim carry As Integer
Dim j As Integer
Dim prod As Integer
Dim ans As Integer
i = 0
numdigits = 1
digits(0) = 2
WHILE i < 999
carry = 0
j = 0
WHILE j < numdigits
prod = (digits(j) * 2) + carry
digits(j) = prod Mod 10
carry = prod \ 10
j = j + 1
WEND
WHILE carry > 0
digits(numdigits) = carry Mod 10
numdigits = numdigits + 1
carry = carry \ 10
WEND
i = i + 1
WEND
i = 0
ans = 0
WHILE i < numdigits
ans = ans + digits(i)
i = i + 1
WEND
print ans
Wednesday, April 2, 2014
Problem 16 in (free)BASIC
Well, it was inevitable that I would have to use BASIC at some point. However, BASIC has far too many dialects. After some issues with getting it to run on my computer because of needing 32-bit versions of a lot of libraries, I decided to solve problem 16 in freeBASIC. I solved this problem to free up Frink for problem 80, as I think it will make that problem very tractable using its ability to use very large integers (indeed, that capability was why I used it on problem 16 in the first place, but I put in a little more work and managed digits by hand to solve it in BASIC). Didn't have too many issues with the language, other than having to discover that \ is integer division, while / will do float division and then round UP to the nearest integer. BASIC does indeed run quickly: solution runs in 34ms on my machine.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment