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

2022-05-13 03:45:47 字數 1482 閱讀 5586

問題描述

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

輸入格式

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

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

輸出格式

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

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

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

樣例輸入239

123abc

樣例輸出

714435274

提示先將十六進製制數轉換成某進製數,再由某進製數轉換成八進位制。

心得:題目有些難度,一開始想的是把16進製制先轉化為10進製,因為從10進製轉化為8進製很容易。但是題目中輸入的16進製制位數規模大,不超過100000位,肯定不能化為10進製數。解法是先把16進製制化為四個2進製數,然後三個二進位制數一組再化為8進製。 注意 39(16進製制)--〉0011    1001   (2進製) --〉111  001(8進製),是從二進位制的低位開始三個一組來計算。

**:

#include #include #include using namespace std;

int fib(int n)//計算2的多少次方

}string str[11];

int two[400008];//因為16進製制的位數不超過100000,所以換成二進位制數字數不超過400000

int main()

}else

}}//到目前為止把16進製制轉成了二進位制

int count=0;//二進位制數三位一組來轉化為8進製

int sum=0;//連續三位二進位制數的值

stackq;

for(j=4*str[k].length()-1;j>=0;--j)//從two陣列的存數的最大下標開始處理,每三個為一組,轉化為8進製,儲存在棧中

}int sum1=0;//考慮處理的末尾,可能最後一組少於3個,有可能是乙個,也可能是兩個,單獨處理,單獨輸出

int c=0;

for(int m=4*str[k].length()%3-1;m>=0;--m)//4*str[k].length()%3判斷還剩下幾個

if(sum1!=0)

cout<

2014.3.4日修改

上面寫的**太複雜了,看到同學寫的該題,受到了啟發。十六進製制轉二進位制不用上面**那麼麻煩。

另一種解法如下:

#include #include using namespace std;

int main()

{ int n;

cin>>n;

for(int k=1;k<=n;k++)

{string s1,s2;//s1為輸入的原始的十六進製制串,s2為轉化成的二進位制串

cin>>s1;

s2="";//初始化

for(int i=0;i

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

問題描述 給定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行,每行為輸入對應的八進位制正整數。注意 輸...