Чтобы правильно напечатать большое число - без таких вещей, как e + - в lua, что мне нужно сделать?Кроме того, как я могу удалить десятичные числа, такие как 123456.0, не используя math.floor ()?
Я сделал комбинированную функцию для a, b меньше 100. Сначала я сделал с факториальной функцией, но это происходит переполнение.Итак, я сделал это с фракционным разложением.Диапазон меньше 100, поэтому я беру простые числа меньше 100 и делаю это.
local n, m = io.read("*n", "*n")
local prime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,
37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
function make_case()
local prime_case = {}
for i, v in ipairs(prime) do
prime_case[i] = {v, 0}
end
return prime_case
end
function fact(n, m, ans)
local case = ans
for i = m, n do
if i ~= 0 then
local num = i
for j, v in ipairs(case) do
repeat
if num % v[1] == 0 then
num = num / v[1]
case[j][2] = case[j][2] + 1
else
break
end
until num % v[1] ~= 0
if num == 1 then
break
end
end
end
end
return case
end
if n-m > m then
m = n - m
end
local top_case = make_case()
local bot_case = make_case()
local top = fact(n, m+1, top_case)
local bot = fact(n-m, 0, bot_case)
local tot = 1
for i, v in ipairs(top) do
--print(v[1], v[2], bot[i][2])
top[i][2] = top[i][2] - bot[i][2]
tot = tot * (top[i][1]^top[i][2])
end
print(math.floor(tot))
Я пробовал 64 40 в качестве входного значения, я получаю результат 2.5064910546967e + 17 (когда я печатаю только Tot),Я не хочу видеть десятичные точки в этом результате, поэтому я ставлю math.floor на результат.Это приводит к 250649105469666112, но последние 2 цифры неверны.Правильный ответ этого ввода - 250649105469666100.
Другие небольшие входы работают довольно хорошо, поэтому я думаю, что эта проблема связана с печатью.Как я могу напечатать большие цифры одна цифра за одной цифрой?