藍橋杯練習 2 24

2021-10-20 18:24:14 字數 1784 閱讀 1365

藍橋試題-基礎練習-十六進製制轉八進位制

問題描述

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

輸入格式

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

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

輸出格式

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

【注意

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

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

樣例輸入239

123abc

樣例輸出

714435274

提示

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

資料規模與約定

n (1<=n<=10)

每個十六進製制數長度不超過100000

題解:​ 問題觀察:

​ 首先容易想到直接將十六進製制轉化為八進位制輸出,但考慮到十六進製制數長度達到了1e5,unsigned long long的空間也不夠用。

​ 顯然,應利用十六進製制、二進位制、八進位制之間的轉化特性,通過字串來解決該問題。

​ 即:

​ 二進位制從最低位起:

​ 每四位的組合相加,即可轉化為十六進製制。

​ 每三位的組合相加,即可轉化為八進位制。

​ 所以可先將十六進製制串拆為四個數一組的二進位制的01串,再每三位相加得出八進位制串。

​ **分析:

​ 首先預寫好每個十六進製制數字對應的四位01串,以char型別的map儲存。

​ 然後將十六進製制串轉為01串

​ 最後將01串轉化為八進位制串並且倒序去前導零輸出。

​ **實現:

#include

#define int long long

#define re register

#define il inline

using

namespace std;

int n;

char map1[16]

[4]=

,,,,

,,,,

,,,,

,,,}

;signed

main()

int len2 = s2.

length()

;int i2 = len2-1;

while

(i2 >=0)

//bin->oct

bool zeroflag =0;

for(

int i3 = s3.

length()

-1; i3 >=

0; i3--

)//reserve

cout << endl;

}return0;

}

學習心得:有關棧與遞迴的運用

練習:luogu-p1030 [noip2001 普及組] 求先序排列

**:

#include

#define int long long

#define re register

#define il inline

using

namespace std;

string a, b;

void

dfs(string a, string b)

}signed

main()

藍橋杯 練習(2 24)

給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由09 大寫字母af組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出n行,每行為輸入對應的八進位制正整數。注意 輸入的十六進製制數不會有前導0,比如...

藍橋杯 遞迴 2 24

回形取數 藍橋杯 基礎練習 問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣...

藍橋杯練習

k好數 問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入格式 ...