藍橋杯十六進製制轉八進位制

2021-10-03 18:36:51 字數 1899 閱讀 4488

問題描述:

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

輸入格式

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

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

輸出格式

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

【注意】

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

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

樣例輸入

123abc

樣例輸出

#include

#include

using

namespace std;

intmain()

string *ss2 =

new string[n]

; string * ss =

new string[n]

;for

(int i =

0; i < n; i++

)for

(int i =

0; i < n; i++)if

(s[i].at

(j)==

'1')

if(s[i].at

(j)==

'2')

if(s[i].at

(j)==

'3')

if(s[i].at

(j)==

'4')

if(s[i].at

(j)==

'5')

if(s[i].at

(j)==

'6')

if(s[i].at

(j)==

'7')

if(s[i].at

(j)==

'8')

if(s[i].at

(j)==

'9')

if(s[i].at

(j)==

'a')

if(s[i].at

(j)==

'b')

if(s[i].at

(j)==

'c')

if(s[i].at

(j)==

'd')

if(s[i].at

(j)==

'e')

if(s[i].at

(j)==

'f')}}

for(

int i =

0; i < n; i++)}

for(

int i =

0; i < n; i++

)else

}else

else}}

else

else

}else

else}}

}}for(

int i =

0; i < n; i++)}

} cout << ss2[0]

;for

(int i =

1; i < n; i++

)return0;

}

最開始用的方法用的int型別,後來在網上查了sstream的方法,或者long long int方法,都沒成功。藍橋杯官網的測試資料為極長的資料,如下:

43a5eb93b0441e9ca4c2b0fb3d30875cbf29abd5b1ac…等萬級長度資料。

所以改用string解決問題。

1.先將十六進製制轉化為二進位制

2.再將二進位制轉化為八進位制

中間進行了二進位制補零,方便二進位制轉八進位制時,三位二進位制代換一位八進位制,轉化為八進位制後再去零,以達到規範的輸出標準。

中間看起來最長的部分其實就是二進位制三位代換為一位八進位制的過程,沒想到怎麼優化能好一些。

藍橋杯 十六進製制轉八進位制

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

藍橋杯 十六進製制轉八進位制

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

藍橋杯 十六進製制轉八進位制

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