• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

lua之m进制转换为n进制-任意进制转换算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

够无聊的写这个,为防止需要的人也无聊一遍,写个吧

算法有n种,但是,咱们一种就够用了

 1 --数组倒序排列
 2 local function orderByDesc( input )
 3     local output = {}
 4     local count = #input
 5     while count > 0 do
 6         table.insert(output, input[count] )
 7         count = count -1 
 8     end
 9     return output
10 end
11 
12 --进制转换,英文不行只好用拼音
13 --@dec 10进制数据,好吧,只要是数字就呆以了
14 --@x 进制,最常见的当然是二、八、十六、进制
15 local function _Dec2X( dec, x )
16     --计算结果存储在这里
17     local new_number = {}
18 
19     --算法如下:
20         --9527 = 9*(10^3)+5*(10^2)+2*(10^1)+7*(10^0)
21         --7 = 9527%10, 2 = (9527-7)%100/100
22         --f(n) = (dec % (x^i) - f(n-1))/x
23         --f(0) = 0
24     --a参数代表第几位,返回是否继续
25     local function f( a )
26         assert(a >= 1)
27         local mod = dec % math.pow(x, a)
28         local last_mod = (a == 1) and 0 or assert(new_number[a-1])
29         new_number[a] = (mod - last_mod)/math.pow(x, a - 1)
30         --取整数部分
31         new_number[a] = math.modf(new_number[a])
32         return mod ~= dec
33     end
34     --该函数取得某位值
35     local i = 1
36     while f(i) do
37         i = i + 1
38     end
39     
40     return new_number
41 end
42 
43 --将某个数据转成X进制
44 --以 9527,10进制为例,{7, 2, 5, 9}
45 local function _numberTable2X(  number_tbl,x )
46     local result = 0
47     for i,v in ipairs(number_tbl) do
48         print(result,x, i, v)
49         result = result + v*math.pow(x, i - 1)
50     end
51     return result
52 end
53 
54 local function test_Dec2X ()
55     local kTestNumber = 9527
56     local n1 = _Dec2X(kTestNumber, 10)
57     -- table.foreach(n1, function ( _,v )
58     --     print(v)
59     -- end)
60     assert(kTestNumber == _numberTable2X(n1, 10))
61 end
62 test_Dec2X()

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua编辑调试器 BabeLua发布时间:2022-07-22
下一篇:
WIndows 使用VS编译 Lua5发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap