原理比較簡單,參考注釋即可理解,僅作筆記用於速查。1. 10進製轉為n進製
不斷對n取餘作為該位上的n進製值即可。
def
ten2n_int
(num:
int, n:
int)
->
str:
# 10進製轉為n進製
if num ==0:
return
"0" res =
"" pos = num >
0# 是否為正數
num =
abs(num)
while num >0:
num, r =
divmod
(num, n)
# aka: num //= n; r = num % r;
res +=
chr(r -10+
97)if r >=
10else
chr(r +48)
return(""
if pos else
"-")
+ res[::
-1]
2. n進製轉為10進製從頭往後,不斷將當前位的n進製數乘以相應的n進製基數,累計到10進製結果上即可。
def
n2ten_int
(num:
str, n:
int)
->
int:
# n進製轉為10進製,預設進製不超過36(即'z'+10)
if num =="":
return
0 num.lower(
)# 預設都採用小寫表示
res, pos =0,
bool
(num[0]
!='-')if
not pos:
# 如果是負數,刪去開頭的 '-' 字元
num = num[1:
] base = n **
len(num)
for i in
range
(len
(num)):
base //= n # ord('a') = 97, ord('0') = 48 | base 是當前的基數
res +=((
ord(num[i])-
97+10)
if num[i]
.isalpha(
)else
(ord
(num[i])-
48))* base
return res *(1
if pos else-1
)
3. n進製轉為m進製直接使用取巧的方式,進製通過n->10->m進行變換即可,否則需要編寫基於m進製的加法。
def
n2m_int
(num:
str, n:
int, m:
int)
->
str:
# n進製轉為m進製
return ten2n_int(n2ten_int(num, n)
, m)
# 借助10進製完成任意進製間的轉換
1. 10進製小數轉為n進製小數不斷乘進製數,取整數字作為當前位的值,直至小數部分為0。
def
ten2n_float
(num:
float
, n:
int, max_len:
int=5)
->
str:
assert
0<
abs(num)
<1#
res, pos =
"0."
, num >
0 num =
abs(num)
while num >
0and
len(res)-2
<= max_len:
num *= n
num, c = math.modf(num)
c =int(c)
res +=
chr(c -10+
97)if c >=
10else
chr(c +48)
return(""
if pos else
"-")
+ res
2. n進製小數轉為10進製小數跟jn進製整數轉10進製整數一樣的套路。
def
n2ten_float
(num:
str, n:
int)
->
int:
# num like "0.***"
res, pos =
0, num[0]
!='-'
num = num[2:
]if pos else num[3:
] base =
1.0for i in
range
(len
(num)):
base /= n
res +=((
ord(num[i])-
97+10)
if num[i]
.isalpha(
)else
(ord
(num[i])-
48))* base
return res *(1
if pos else-1
)
3. n進製小數轉m進製小數def
n2m_float
(num:
str, n:
int, m:
int)
->
str:
# n進製轉為m進製小數
return ten2n_float(n2ten_float(num, n)
, m)
# 借助10進製完成任意進製間的轉換
大整數任意進製轉換
include include include include using namespace std char str 1000 輸入字串 int start 1000 ans 1000 res 1000 被除數,商,餘數 轉換前後的進製 static int oldbase static int...
面試演算法題
前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...
面試演算法記錄
1.親和數問題 求500萬以內的所有親和數 如果兩個數a和b,a的所有真因數之和等於b,b的所有真因數之和等於a,則稱a,b是一對親和數。例如220和284,1184和1210,2620和2924。思路 220 1 2 4 71 142 sum 284 284 1 2 4 5 10 11 20 22...