第二天
問題描述
給定n個十六進製制正整數,輸出它們對應的八進位制數。
輸入格式
輸入的第一行為乙個正整數n (1<=n<=10)。
接下來n行,每行乙個由09、大寫字母af組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進位制正整數。
注意輸入的十六進製制數不會有前導0,比如012a。
輸出的八進位制數也不能有前導0。
樣例輸入
123abc
樣例輸出
提示先將十六進製制數轉換成某進製數,再由某進製數轉換成八進位制。
分析:首先想到的就是將十六進製制的每位數轉換為四位二進位制數 然後每三位二進位制數轉換為八進位制數
減少在運算上的計算運用的hashmap來訪問每一位數對應的值。
但是發現無法設定map
實在想不出來
網上的方法(看似簡單的數制轉換,也用到了棧)
public class transform{
public void systemscanner() {
scanner jin = new scanner(system.in);
while (jin.hasnext()) {
int length = jin.nextint();
for (int i = 0; i < length; i++){
string strtmp=jin.next();
tranform(strtmp.tochararray(), strtmp.length());
public static void main(string args) {
new transform().systemscanner();
* 3位16進製制等價於4位8進製
int stack=new int[40000];//根據測試資料進行的設定
public void tranform(char str, int length) {
char buff = new char[4];//這個好像是多餘的,後面也沒有用到buff
int top = -1;
for (int i = length - 1; i >= 0; i -= 3) {
int sum = 0;
for (int j = 0; j < 3 && i - j >= 0; j++) {// i-j>=0防止不夠三個的情況
int tmp =( str[i - j] >= '0' && str[i - j] <= '9' )? str[i - j] - '0': str[i - j] - 'a' + 10;//區分是數字,還是字元,進行對應轉換
sum+=(tmp<<(4*j));//這句很重要,通過這句就可以從16變成10進製了,不過,不知道為什麼?是如何得出的呢?而且進行累加之後就能得到最終的結果很神奇(其實是進行左移位,左移四位就相當於乘了16,8位就是256 16的平方)
stack[++top]=sum;//sum的結果是16進製制轉化10進製的結果,每3個16進製制變成10進製,再變8進製(每三位十六進製制轉換為十進位制)
while(stack[top]==0){//排除前導為0的判斷
top--;
// for(int i=top;i>=0;i--){//直接輸出會丟失前導0,因為此轉化成8進製並不是最左邊的情況,應該保留0
// system.out.print(integer.tooctalstring(stack[i]));//從10進製轉化成8進製
for(int i=top;i>=0;i--){
string str1=integer.tooctalstring(stack[i]);//從10進製轉化成8進製
if(i!=top&&str1.length()<4){
//不是最左邊的乙個,就不用去掉前導0,而預設是去掉0的,所以要進行補會
for(int y=0;y<4-str1.length();y++)
system.out.print("0");
system.out.print(str1);
system.out.println();
藍橋杯訓練 第二天1261
藍橋杯2015初賽 移動距離 x星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3.當排滿一行時,從下一行相鄰的樓往反方向排號。比如 當小區排號寬度為6時,開始情形如下 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 我們的問題是 已知了兩個樓號m和n...
藍橋杯訓練 第二天1259 1260
藍橋杯2015初賽 三羊獻瑞 觀察下面的加法算式 其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。請你填寫 三羊獻瑞 所代表的4位數字 答案唯一 不要填寫任何多餘內容。輸出請你填寫 三羊獻瑞 所代表的4位數字 答案唯一 不要填寫任何多餘內容。答案唯一,相同的漢字代表相同的數字,不同的漢字代...
藍橋杯訓練 第二天1255 1258
藍橋杯2015初賽 飲料換購 樂羊羊飲料廠正在舉辦一次 優惠活動。樂羊羊c型飲料,憑3個瓶蓋可以再換一瓶c型飲料,並且可以一直迴圈下去 但不允許暫借或賒賬 請你計算一下,如果小明不浪費瓶蓋,盡量地參加活動。那麼,對於他初始 的n瓶飲料,最後他一共能喝到多少瓶飲料。輸入輸入存在多組測試資料 每組測試資...