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

2022-09-03 11:09:07 字數 1146 閱讀 7463

問題描述

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

輸入格式

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

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

輸出格式

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

【注意

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

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

樣例輸入239

123abc

樣例輸出

714435274

提示

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

下面是我的**解決思路:

#include #include #include using namespace std;

/*演算法解釋:

採用字串方式接收待轉換的十六進製制數。用對應函式將其轉換為二進位制數,存在字串中,再用數學方法將其對應的二進位制轉換為八進位制值,結果存為vector型別並列印。

遇到問題的解決方法:

1. 十六進製制轉二進位制,1個十六進製制位對應4個二進位制位,但3個二進位制位,對應1個八進位制位。可能出現二進位制轉為八進位制時,位數不正確導致錯誤。如a12為1010 0001

轉為八進位制時: 10 100 001 ,前面只有兩個二進位制數10,不能與八進位制相匹配。

- solution: 判斷儲存二進位制的vector長度,flag = 3 - bin.length()%3; flag即為二進位制vector應該在前面新增0的個數

2. 題目要求八進位制首位不能輸出0,如39轉換結果為071。

- solution: 返回演算法,考慮解決該問題的過程中,發現在輸出時控制是較為簡單的方法,即在輸出時檢測八進位制首位是否為0,為0則不輸出。

*/int main()

for(int i = 0;i < cnt;i++)

if( i != cnt - 1)

coutreturn oct;

}

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

基礎練習 十六進製制轉八進位制 時間限制 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組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度...