为什么当我删除小数点时,我的组合函数不能正确打印大数?(在Lua中)

在lua中怎样才能正确打印大数 - 不会出现如e+之类的问题?另外,我怎样能够在不使用math.floor()的情况下删除小数点数字,例如123456.0?

我为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。

其他小输入效果非常好,因此我认为这个问题源于打印上。如何逐位打印大数字?

点赞