其他進位制轉化為10進位制和10進位制轉化為其他進位制(均一個函式)c++
阿新 • • 發佈:2018-11-30
今天專門抽出來一點時間來弄一下,進位制轉化的問題,不論是其他進位制轉化為10進位制還是10進位制轉化為其他進位制,均使用同一個函式來完成,只需要手動輸入從哪個進位制轉化為哪個進位制。
程式碼如下:
#include <iostream>
#include <cmath>
#include <cctype>
using namespace std;
void TenToOther(int n1,int n2)
{
int n,s[100]={0},i=0;
string s2="0123456789ABCDEF"; //將s和s2對應起來,方便輸出字母
cin>>n;
while(n!=0){
s[i++]=n%n2;
n/=n2;
}
for(int j=i-1;j>=0;j--)
if(j==0&&s[j]==0) continue;
else cout<<s2[s[j]];
}
void OtherToTen(int n1,int n2)
{
string s;
cin>>s;
int sum=0,k=s.size()-1;
for(int i=0;i<s.size ();i++,k--)
if(isdigit(s[i]))sum+=int(s[i]-'0')*pow(n1,k);
else sum+=int(s[i]-'A'+10)*pow(n1,k);
cout<<sum<<endl;
}
int main()
{
int n1,n2,n;
cout<<"n1---->n2"<<endl;
cin>>n1>>n2;
if(n1==10) TenToOther(n1,n2);
else if(n2==10) OtherToTen(n1,n2);
return 0;
}
來總結一下:
1)十進位制轉化為其他進位制時,為了避免餘數超過10,所以對於輸出的資料還是需要用s2來轉化一下。
2)其他進位制轉化為十進位制,因為其他進制中還有字母所以需要用一個string 類來儲存輸入的資料,最後在輸入的時候,還需要判斷一下這個string類中儲存的是數字還是字母,再進行相應的轉化。