任務描述
本關任務:基於棧stack數據結構解決整數十進制轉八進制的問題。
相關知識
棧是基礎的數據結構,元素操作遵循后進先出的原理。本關卡基於數組存儲實現了棧的基本操作。
C++ STL中提供了棧結構的實現 1、c++ stl棧stack的頭文件為:#include <stack> 2、c++ stl棧stack的成員函數介紹 top():返回一個棧頂元素的引用,類型為 T&。如果棧為空,返回值未定義。 push(const T& obj):可以將對象副本壓入棧頂。 push(T&& obj):以移動對象的方式將對象壓入棧頂。 pop():彈出棧頂元素。 size():返回棧中元素的個數。 empty():在棧中沒有元素的情況下返回 true。 emplace():用傳入的參數調用構造函數,在棧頂生成對象。 swap(stack<T> & other_stack):將當前棧中的元素和參數中的元素交換。參數所包含元素的類型必須和當前棧的相同。
例:以下代碼實現了,輸入5個元素,並逆序輸出。
// stack::push/pop#include <iostream>#include <stack>using namespace std;int main (){stack<int> mystack; //聲明元素類型為int類型的棧for (int i=0; i<5; ++i)mystack.push(i); //壓棧cout << "Popping out elements...";while (!mystack.empty()) //判斷棧是否為空{cout << " " << mystack.top(); //讀棧頂元素mystack.pop(); //彈棧}cout << endl;return 0;}
為了完成本關任務,你需要掌握:1.如何創建一個棧,2.入棧、出棧操作,3.進制轉換。
進制轉換
除K取余法,例如十進制數10轉二進制:
上圖可得:K=2,1010=10102 即:10=1×23+0×22+1×21+0×20
編程要求
本關的編程任務是補全右側代碼片段Decimal_Conversion_Octal中Begin至End中間的代碼,具體要求如下:
- 在
Decimal_Conversion_Octal中,利用棧stack的基本操作實現整數的十進制轉八進制,並輸出八進制結果,末尾換行。
輸入輸出說明
輸入十進制數n(n為絕對值不超過10000的整數),輸出n對應的八進制數。
樣例一: 測試輸入:71 預期輸出:107
樣例二: 測試輸入:8 預期輸出:10
//輸入10進制數,轉換為8進制數輸出 #include <iostream> #include<stack> using namespace std; int main() { // 請在這里補充代碼,完成本關任務 /********** Begin *********/ int num; while(~scanf("%d",&num)){ if(num==0)cout<<'0'<<endl; stack<int>v; while(num){ v.push(num%8); num/=8; } while(!v.empty()){ cout<<v.top(); v.pop(); } } /********** End **********/ }
