藍橋試題-基礎練習-十六進製制轉八進位制
問題描述
給定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取模後的值。輸入格式 ...