【语法】
一、隐蔽陷阱
大数加法乘法都能竖式模拟了,减法直接套加法模板:被减数小于减数时借位全程为负,输出一串乱码——减法的次序与借位需要单独的设计。
二、底层原理
竖式减法三步:先比较两数大小,小的减大的就交换并打负号;再从末位对齐逐位相减,不够减向高位借 1 当 10;拼接后去除前导零。借位标记在循环里随位传递,一遍走完。
三、正确代码
基础写法(大数比较器):
local function cmpBig(a, b)
if #a ~= #b then
return #a > #b and 1 or -1
end
return a < b and -1 or (a > b and 1 or 0)
end
进阶写法(带符号减法,一遍借位):
local function subBig(a, b)
local neg = false
if cmpBig(a, b) < 0 then
a, b, neg = b, a, true
end
local borrow, out = 0, {}
for i = 1, #a do
local da = tonumber(a:sub(#a - i + 1, #a - i + 1)) or 0
local db = tonumber(b:sub(#b - i + 1, #b - i + 1)) or 0
local d = da - db - borrow
if d < 0 then d = d + 10; borrow = 1 else borrow = 0 end
out[#out + 1] = d
end
local s = table.concat(out):reverse():gsub("^0+", "")
if s == "" then s = "0" end
return neg and "-" .. s or s
end
local p = getplayerbyname("sub01")
sendmsg(p, 1, subBig("301", "1000"))
四、引擎验证
1000 减 301 精确得 699;301 减 1000 输出 -699;两数相等时输出 0 且无前导零。
五、FAQ
问:连减怎么处理?
答:逐次调用并把符号传入下一轮。
问:能与加法合并吗?
答:同号相加异号相减,统一进大数运算入口。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、机制原理 一行代码拆解:local extra = index[main[key]] or {}。两张表按共同…
【游戏】 一、规则机制 隐蔽的坑:拖拽小窗松手位置随缘,有的只剩一半挂在屏幕外,再也拉不回来。边缘吸附补上收尾:松手时窗口落…
【游戏】 一、规则机制 一行代码拆解:if text == lastText and now - lastAt < 5 th…
【语法】 一、机制原理 抛坑提问:二分查找在均匀分布的有序数组上,还能再快吗?插值查找把对半改成按比例估位:目标值在区间里处…
【游戏】 一、规则机制 线上事故:新手第一次进主界面面对满屏按钮无所适从,客诉清一色"不知道先点哪"。新手遮罩的流程:首次进…
【游戏】 一、规则机制 抛个坑:装备好坏要看攻击、气血、抗性一堆属性,太费劲——综合评分怎么算才服众?评分规则:各属性按配置…