1. 程式人生 > 其它 >C++進位制轉換

C++進位制轉換

對於進位制轉換我們知道

被除數除以除數,餘數一定小於除數,

如果除數大於10,餘數就有可能大於9,但表示的時候要輸出字母表示。如16進制中"A"表示"10",“F"表示"15”。如36進制中“Z”表示"35"

那麼我們可以看如下寫的進位制轉換程式

執行結果:

原始碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include <iostream> usingnamespacestd;
intmain(){ intn, m, a, b, c[1000]; cout <<"請輸入一個十進位制數:"; cin >> n; a = n; cout <<"你想將這個數轉化為幾進位制(最小:2,最大:36):"; cin >> m; if(m < 2 || m > 36){ cout <<"進位制錯誤!"; return0; } for(inti = 0; i < 1000; i++){ c[i] = m; } intcount; for(count = 0; b != 0; count++){ b = a / m;
c[count] = a % m; a = b; } cout <<"對應的"<< m <<"進位制數:"; for(inti = count - 1; i >= 0; i--){ if(c[i] != m){ if(c[i] < 10){ cout << c[i]; } else{ cout << (char)(c[i] + 55); } } } return0; }<br> 
1 2 3 a,b,c分別表示被除數、商、餘 n表示要轉換的數 m表示目標進位制<br>對於其中c[i]=m是初始化1個不可能的數,如8進位制不存在8

以上程式碼是通過for迴圈來實現的進位制轉換,雖說沒有問題,但我們完全可以用上學期學過的資料結構知識中的棧來寫。

改進後:

#include<iostream>
using namespace std;

const int Size = 50;
class SeqStack
{
private:
int data[Size]; //資料儲存陣列
int top;
public:
SeqStack (){top=-1;}
~SeqStack (){}
void Push(int x); //入棧操作
void Pop(); //出棧操作
};

void SeqStack ::Push(int x)
{
top=-1;
int y;
int m=2;
if(top==Size-1) throw "上溢";
while(x!=0)
{
y=x%m;
data[++top]=y;
x=x/m;
};
}

void SeqStack ::Pop()
{
if (top == -1) throw "下溢";
while(top!=-1)
{
int x=data[top--];
cout<<x;
}
}

void main()
{
int i=1;
int number;
SeqStack a;
do{
cout<<"請輸入一個十進位制整數!"<<endl;
cin>>number;
a.Push(number);
a.Pop();
cout<<endl;
cout<<"若需要繼續轉換,請輸入1;否則請輸入0!"<<endl;
cin>>i;
}while(i==1);
}

那麼這裡我們可以看出我們是採用迴圈出棧的方式進行解決。

輸出結果:

總結:

我們可以採用for迴圈的方式進行進位制轉換,但為了深化我們的程式思維,我們可以多角度、多方法的進行程式編寫,結合所學的資料結構知識,進行編寫程式以提升我們的程式思維和技術能力。