藍橋杯基礎練習 十六進製制轉八進位制

2021-10-22 22:30:04 字數 1517 閱讀 1792

思路:把十六進製制轉換成二進位制,再把二進位制轉換成八進位制

設定乙個字串string temp="0123456789abcdef",方便找到輸入字串中每個字母對應的十進位制

對於輸入的字串s,遍歷每個字母s[i],使用temp.find(s[i]),找到s[i]對應的十進位制t。把十進位制t轉換成二進位制,並儲存在陣列er中。注意每輪都需要對陣列er清零。

輸入字串s的長度記為len,則陣列er的長度為4*len,判斷4*len對3取模,餘數記為mod。如果mod=2,ans[0]=er[1]+er[0]*2;如果mod=1,ans[0]=er[0]。接下來從mod開始,每三位轉換為乙個八進位制,並儲存在ans中

對ans進行輸出,需要對首位單獨判斷。

#include

using

namespace std;

string temp=

"0123456789abcdef"

;int ans[

500000];

intmain()

int cnt=0;

//記錄八進位制ans的下標

memset

(ans,0,

sizeof

(ans));

//二開始把進製轉八進位制

int mod=(4

*len)%3

;if(mod==2)

ans[cnt++

]=er[1]

+er[0]

*2;else

if(mod==

1)ans[cnt++

]=er[0]

;for

(int i=mod;i<=

4*len-

3;i+=3

) ans[cnt++

]=er[i]*4

+er[i+1]

*2+er[i+2]

;//輸出

for(

int i=

0;i)else

cout

}

最後:

**調了三天的血淚史:平時習慣於把輸入資料存放在txt檔案中,因為懶得每次執行**都輸入測試資料。即以下語句

#ifdef online_judge

#else

freopen

("1.txt"

,"r"

,stdin);

#endif

但是藍橋系統貌似不支援這樣的語句,同樣的答案,上述**沒注釋,評測結果就是錯的,注釋掉之後就對了。。。。

基礎練習 十六進製制轉八進

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

藍橋杯練習 基礎練習 十六進製制轉八進位制

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

藍橋杯 基礎練習 十六進製制轉八進位制

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