Почему моя комбинационная функция не печатает большие числа правильно, когда я удаляю десятичные точки? (в Луа) - PullRequest
1 голос
/ 06 июня 2019

Чтобы правильно напечатать большое число - без таких вещей, как 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.

Другие небольшие входы работают довольно хорошо, поэтому я думаю, что эта проблема связана с печатью.Как я могу напечатать большие цифры одна цифра за одной цифрой?

...