每日演算法系列 EOJ 3031 二進位制倒置

2021-10-02 23:31:05 字數 2013 閱讀 7899

給定乙個整數

例如:題目鏈結

這題考查的主要是大數的進製轉換,其他沒有什麼演算法技巧,但是對**實現要求還是挺高的,適合用來鍛鍊你的耐心**風格

整體思路非常簡單,不就是先把輸入的 10 進製數

所以整體**拆分成了三步,先從 10 進製轉 2 進製,再顛倒 2 進製,最後從 2 進製轉 10 進製。

為了**的普適性,我這裡直接實現了從任意

這就涉及到了大數的任意進製轉換問題,假設

部分**如下:

while(n

>0)

看起來非常簡單,但是步驟 1 和 2 都涉及到了大數的求餘大數的除法演算法,所以我們還得實現這兩個演算法。

大數求餘只要從int型別儲存餘數了。

部分**如下:

int

mod(

vector

<

int>&x,

inta

,intb)

returnq;

}

大數除法類似,從

部分**如下:

void

div(

vector

<

int>&x,

inta

,intb)

for(

inti=n

-1;i

>0;

--i)}

#include

using

namespace

std;

// string轉化為vector,倒序儲存

vector

<

int>

s2i(

string&s

)if(idx==n

)idx=n

-1;for

(inti=

n-1;

i>=

idx;--i

)returnx;

}// a進製下x%b,x倒序儲存

intmod

(vector

<

int>&x,

inta

,intb)

returnq;

}// a進製下x/b,x倒序儲存

void

div(

vector

<

int>&x,

inta

,intb)

for(

inti=n

-1;i

>0;

--i)}

// a進製下s轉化為b進製string

string

convert

(strings,

inta

,intb)

intm=y

.size

();string

res="";

for(

inti=m

-1;i

>=0;

--i)return

res;

}int

main

()return0;

}

x

=int

(input

())foriin

range(x

):print

("case #

%d:"%i

)print

(int

(str

(bin

(int

(input

())))[

2::][::-1

],2))

二進位制倒序演算法

建表,遞推求出0 n的所有數的二進位制倒序,複雜度o n 這裡的n,l滿足n 2 l 1 二進位制串長度l,求出某個數n的二進位制倒序,演算法思想複雜度o log l 網上有乙個 雷德演算法,大致思路也是遞推求得1 n的所有數的二進位制逆序,不過方法比較顯然麻煩,每一次都要在之前的逆序數基礎上找第乙...

二進位制演算法

首先是6個二進位制的運算子 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變...

二進位制壓縮 演算法

二進位制壓縮 在程式設計時遇到每個資料只有兩種狀態,且 dfs 或者 bfs 時遍歷時間複雜度高時,可以採用二進位制壓縮資料,尤其是二維陣列。1.二進位制壓縮乙個二位陣列 例如 正常儲存資料回使用二位陣列,1,0,即 0100 0000 0000 0100如果我們採用二進位制壓縮為乙個 int 型別...