思路:把十六進製制轉換成二進位制,再把二進位制轉換成八進位制
設定乙個字串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行,每行為輸入對應的八進位制正整數。注意 輸...