昨天拿到一個題,把任意一個int型的十進制數n轉換爲m(0<m<=32)進制。
既然沒有小數思路就很簡單了,只需要把n除以m取餘數,記錄每個餘數,最後把餘數反序輸出(如圖)。
下面就來分步實現它。
(注:這並不算最簡單的實現過程)
首先n/m取餘,並用一個數組來存儲餘數:
<pre class="cpp" name="code">int yu[100];
int n,m,i;
i=0;
cin>>n;
cin>>m;
while(n)
{ yu[i]=n%m;
n=n/m;
i++;
}
然後是反序輸出:
for(i=i-1;i>=0;i--)
{
cout<<yu[i];
}
cout<<endl;
(這裏存儲加反序輸出,我首先想到的是用鏈表,但題目已經說明n是int型,所以用來存儲餘數的數組[100]已經夠用了,不會造成太大的空間浪費,用鏈表就得不償失了。)
因爲超過11的數要用字母來表示,所以輸出時還要加這個判斷:
if(yu[i]>10)
{
yu[i]=yu[i]+55;
cout<<(char)yu[i];
}
else
cout<<yu[i];
這樣就完成了一個十進制轉其他進制的程序。
完整的代碼如下:
#include<iostream>
using namespace std;
int main()
{
int n,m,i;
int yu[100];
i=0;
cin>>n;
cin>>m;
while(n)
{
yu[i]=n%m;
n=n/m;
i++;
}
for(i=i-1;i>=0;i--)
{
if(yu[i]>10)
{
yu[i]=yu[i]+55;
cout<<(char)yu[i];
}
else
cout<<yu[i];
}
cout<<endl;
return 0;
}