利用棧實現整數的十進制轉八進制


任務描述

本關任務:基於棧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個元素,並逆序輸出。

  1. // stack::push/pop
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. int main ()
  6. {
  7. stack<int> mystack; //聲明元素類型為int類型的棧
  8. for (int i=0; i<5; ++i)
  9. mystack.push(i); //壓棧
  10. cout << "Popping out elements...";
  11. while (!mystack.empty()) //判斷棧是否為空
  12. {
  13. cout << " " << mystack.top(); //讀棧頂元素
  14. mystack.pop(); //彈棧
  15. }
  16. cout << endl;
  17. return 0;
  18. }

為了完成本關任務,你需要掌握:1.如何創建一個棧,2.入棧、出棧操作,3.進制轉換。

進制轉換

K取余法,例如十進制數10轉二進制: 上圖可得:K=2,1010=10102 即:10=1×23+0×22+1×21+0×20

編程要求

本關的編程任務是補全右側代碼片段Decimal_Conversion_OctalBeginEnd中間的代碼,具體要求如下:

  • 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 **********/
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM