lua之m進製轉換為n進製 任意進製轉換演算法

2022-03-21 00:13:10 字數 2141 閱讀 5116

夠無聊的寫這個,為防止需要的人也無聊一遍,寫個吧

演算法有n種,但是,咱們一種就夠用了

1

--陣列倒序排列

2local

function

orderbydesc( input )

3local output ={}

4local count = #input

5while count > 0do6

table.insert

(output, input[count] )

7 count = count -1

8end

9return

output

10end

1112

--進製轉換,英文不行只好用拼音

13--

@dec 10進製資料,好吧,只要是數字就呆以了

14--

@x 進製,最常見的當然是

二、八、十

六、進製

15local

function

_dec

2x( dec, x )

16--

計算結果儲存在這裡

17local new_number ={}

1819

--演算法如下:

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引數代表第幾位,返回是否繼續

25local

function

f( a )

26assert(a >= 1)27

local mod = dec % math.pow

(x, a)

28local last_mod = (a == 1) and0or

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])

32return mod ~=dec

33end

34--

該函式取得某位值

35local i = 1

36while f(i) do

37 i = i + 1

38end

3940

return

new_number

41end

4243

--將某個資料轉成x進製

44--

以 9527,10進製為例,

45local

function

_numbertable

2x( number_tbl,x )

46local result = 0

47for i,v in

ipairs(number_tbl) do

48print

(result,x, i, v)

49 result = result + v*math.pow(x, i - 1)50

end51

return

result

52end

5354

local

function

test_dec2x ()

55local ktestnumber = 9527

56local n1 = _dec2x(ktestnumber, 10)57

--table.foreach(n1, function ( _,v )

58--

print(v)

59--

end)

60assert(ktestnumber == _numbertable2x(n1, 10

))61

end62 test_dec2x()

M進製轉換為N進製數

給定乙個十進位制數m,以及需要轉換的進製數n。將十進位制數m轉化為n進製數 輸入為一行,m 32位整數 n 2 n 16 以空格隔開。為每個測試例項輸出轉換後的數,每個輸出佔一行。如果n大於9,則對應的數字規則參考16進製制 比如,10用a表示,等等 比如 輸入 7 2 輸出 111 進製轉換的思路...

從M進製轉換為N進製

從m進製轉換為n進製 internal class mbase2nbase ctor m進製值字串 m進製 如10 引數值在2 36的範圍內 n進製 如8 則意味著從10進製轉換成8進製.引數值在2 36的範圍內 public mbase2nbase string mvalue,int m,int ...

練習系列 8 m進製轉n進製(任意進製轉換)

author liubao date 2011 4 10 brief m進製轉n進製,主流實現方式 include m進製 數字 字串轉為n進製字串。先由m進製轉為10進製,再由10進製轉為n進製 param dest 轉換完畢的n進製字串 param n 目的進製數 十六進製制填16 二進位制填2...