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>
using namespace std; int main(){
int n, m, a, b, c[1000];
cout << "請輸入一個十進位制數:" ;
cin >> n;
a = n;
cout << "你想將這個數轉化為幾進位制(最小:2,最大:36):" ;
cin >> m;
if (m < 2 || m > 36){
cout << "進位制錯誤!" ;
return 0;
}
for ( int i = 0; i < 1000; i++){
c[i] = m;
}
int count;
for (count = 0; b != 0; count++){
b = a / m;
c[count] = a % m;
a = b;
}
cout << "對應的" << m << "進位制數:" ;
for ( int i = count - 1; i >= 0; i--){
if (c[i] != m){
if (c[i] < 10){
cout << c[i]; }
else {
cout << ( char )(c[i] + 55);
}
}
}
return 0;
}<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迴圈的方式進行進位制轉換,但為了深化我們的程式思維,我們可以多角度、多方法的進行程式編寫,結合所學的資料結構知識,進行編寫程式以提升我們的程式思維和技術能力。