藍橋杯 16 8進製轉換問題

2021-08-14 18:40:26 字數 1907 閱讀 8510

世界上最涼的事情是什麼呢,是你明明想到了卻做不出來

剛剛在做藍橋杯的練習題,16進製制轉到8進製

一下子就想到了把16轉換成2再轉換成8的方法,然後也寫出來了,但是只在小的範圍內是正確的,自己也不知道是**出了問題,十分涼涼

題目如下

問題描述

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

輸入格式

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

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

輸出格式

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

【注意】

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

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

樣例輸入239

123abc

樣例輸出

714435274

【提示】

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

我的錯誤**

#include#include#includeusing namespace std;

void toeight(char* b, int n)//2進製轉換成8進製

else if (i - 1 >= 0)//最後剩不到3位的2種情況

else

}if (s.top() == 0)

s.pop();//第一位是0的不輸出

while (!s.empty())

cout << endl;

}void totwo(string a)

} toeight(b, a.size()*4);

}int main()

}}

此處是別人ac的**

#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<

(博主的部落格)

這個博主的同學還寫了一種更簡潔的,我覺得很巧妙,感興趣的可以自己看一下。

哈哈,時隔不久,我就把bug調出來了

#include#include#includeusing namespace std;

void toeight(string b)

if (s.top() == 0)

s.pop();

while (!s.empty())

cout << endl;

}void totwo(string a)

} toeight(b);

}int main()

}}

嗯就是很開心,感謝綠色的小熊給我的幫助

藍橋杯 進製轉換

一 十六進製制轉八進位制 問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制 數長度不超過100000。輸出格式 輸出n行,每行為輸入對...

藍橋杯進製轉換

問題描述 我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減 為指數,以 為底數的冪之和的形式。例如 可表示為 這樣的形式。與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的 值 為指數,以 為底數的冪之和的形式。一般說來,任何...

藍橋杯 進製轉換

問題描述 編寫函式將十進位制整數按8進製輸出,然後編寫main函式驗證該函式。例如輸入12,則輸出為 12 014,輸入32,則輸出32 040。輸入格式 輸入乙個整數。輸出格式 輸出這個整數的八進位制形式。方法使用除基取餘法。利用陣列,將每次除基取的餘數儲存在陣列中,注意最後資料輸出的陣列下標。i...