这是我要解决的问题:http://projecteuler.net/problem=20(找到 100 中的数字总和!)
我正在使用 Lua,它只有 double 作为数字类型,所以我不得不手动处理。我使用的代码几乎与我在问题 16 中使用的代码相同(找到 2^1000 中的数字总和)。然而,这一次问题似乎超出了我的算法在相当长的时间内解决的问题——它达到了大约 32 个!在我必须等待超过 10 秒才能计算下一个总数之前,然后是 34!它比我等待的时间更长。有什么办法可以加快速度(使用“原始”Lua - 而不是 LuaJIT 或类似的东西)?
local sum = {1}
for i=1,100 do
local carry = 0
for v=1,#sum do
local c = carry
carry = 0
local t = sum[v] * i
while t >= 10 do
t = t - 10
carry = carry + 1
end
local s = t + c
while s >= 10 do
s = s - 10
carry = carry + 1
end
sum[v] = s
end
if carry > 0 then
sum[#sum+1] = carry
end
print(""..i.."! = "..getCharactersReversed(sum))
end