演算法基礎 十六進製制轉八進位制

2021-09-10 01:26:10 字數 2546 閱讀 3962

六進製制,八進位制,二進位制,十進位制之間的轉換是最基本的能力,但有些題目對於新手來說有點難以理解,我拿出一道題來拓展的講一講。

進製轉換方法:

1、二進位制轉八進位制——取每三位按權相加。

2、二進位制轉十六進製制—取每四位按權相加。

3、二進位制轉十進位制——按權相加。

4、八進位制轉二進位制——熟練掌握二進位制轉換,做到看到乙個數直

接寫它的二進位制數,再將二進位制相連線,不足三位補0,去前導

0。6、十六進製制轉二進位制—同八進位制,注意不足四位補0,去前導0.

7、十進位制轉八進位制——除八取餘。

8、十進位制轉十六進製制—除十六取餘。

9、十六進製制和八進位制轉十進位制通過二進位制轉換。

給定n個十六進製制正整數,輸出它們對應的八進位制數。

輸入的第一行為乙個正整數n (1<=n<=10)。

接下來n行,每行乙個由0~~9、大寫字母a~f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。

輸出n行,每行為輸入對應的八進位制正整數。

【注意】

輸入的十六進製制數不會有前導0,比如012a。

輸出的八進位制數也不能有前導0。

2

39123abc

71

4435274

轉換進製最簡單的方法是使用"iostream"庫函式下的格式控制符dec、hex、oct。

#include

using namespace std;

intmain()

評測一看:錯誤。回頭一看,100000位十六進製制,還是老老實實打吧。

有兩條路可以走,字串和陣列。我第一感覺字串想起來簡單,直接下手字串。

string sixteen;

cin>>sixteen;

string tow;

string eight;

首先是十六進製制轉二進位制,我原來打的有點煩了。這是網上傳的比較廣的乙個方法,

for

(int j=

0; jlength()

; j++

)}

二進位制轉八進位制是從右往左每3位按權相加,不足補0。所以我們在轉換之前先要確保它是3的整除數。

if

(tow.

length()

%3==1

)//1

tow=

"00"

+tow;

//001

if(tow.

length()

%3==2

) tow=

"0"+tow;

因為要確保不能存在前導0,所以我們拿出前三個來判斷他們相加是不是等於0,即他們三個等不等於0:

if(!

(tow[0]

=='0'

&&tow[1]

=='0'

&&tow[2]

=='0'))

『10』+5, 即『10』的ascll碼加上5, 即『15』的ascll碼

如果我是char temp=15,那就是ascll碼為15的值。

然後對後面的進行轉換:

for

(int j=

3; jlength()

; j+=3

)

tow[j]是乙個字元型,它減去『0』實際上就是它的ascll碼值減去『0』的ascll碼值,作為數字的它,即等於它的整數型。

也可以用一種更可觀的方式,就是碼字要多了點:

for

(int j=

3; jlength()

; j+=3

)

這是我做的完整的**,一開始我以為是輸入完十六進製制後再一起輸出八進位制,後來發現輸入乙個輸出乙個和一起輸入一起輸出都是對的。

#include

using namespace std;

intmain()

}if(tow.

length()

%3==1

) tow=

"00"

+tow;

if(tow.

length()

%3==2

) tow=

"0"+tow;if(

!(tow[0]

=='0'

&&tow[1]

=='0'

&&tow[2]

=='0'))

for(

int j=

3; jlength()

; j+=3

) cout<}return0;

}

十六進製制轉八進位制演算法

兩種解法 都需要中轉一次 第一種 十六轉十,十轉八.由於執行多次迴圈,當資料很大時,超時.include includeusing namespace std long long lc int a,int n 10 8 int a 10 int l sum int i 0 while l for i...

十六進製制轉八進位制

時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出格式 輸...

十六進製制轉八進位制

問題描述 給定n 個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來 n行,每行乙個由 0 9 大寫字母 a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過 100000 輸出格式 輸出n 行,每行為輸入對應的八進位制正整...