實驗內容
[問題描述]
十進制N和其它進制數的轉換是計算機實現計算的基本問題,其解決方法很多,其中一個簡單算法基於下列原理:
N=(n div d)*d+n mod d
( 其中:div爲整除運算,mod爲求餘運算)
例如 (1348)10=(2504)8,其運算過程如下:
n n div 8 n mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
從中我們可以看出,最先產生的餘數4是轉換結果的最低位,這正好符合棧的特性即後進先出的特性。所以可以用順序棧來模擬這個過程。試編程實現將10進制數轉換成N進制數。
[基本要求]
對於鍵盤輸入的任意一個非負的十進制整數,打印輸出與其等值的八進制數。由於上述的計算過程是從低位到高位順序產生的八進制數的各個數位,而打印輸出,一般來說應從高位到地位進行,恰好和計算過程相反。因此可以先將計算過程中得到的八進制數的各位進棧,待相對應的八進制數的各位均產生以後,再使其按順序出棧,並打印輸出。即得到了與輸入的十進制數相對應的八進制數。
【代碼】
- #include<iostream>
- #include<stack>
- using namespace std;
- bool isInt();
- void conversion(int n,int x);
- int main()
- {
- int n;
- cout<<"請輸入一個十進制數:"<<endl;
- cin>>n;
- cout<<"轉換成8進制數爲:"<<endl;
- conversion(n,8);
- system("pause");
- }
- void conversion(int n,int x)//n表示輸入的十進制數,x表示進制
- {
- stack<int> s;
- if(n<=0)
- {
- cout<<"請輸入一個正整數!"<<endl;
- }
- while(n>0)
- {
- s.push(n%x);
- n=n/x;
- }
- while(!s.empty())
- {
- cout<<s.top();
- s.pop();
- }
- }
注:以上內容僅供參考,如有問題歡迎指正。