C++面向对象思想实现进制转换。
构建两个类:
1.数字类
string num 保存数字,如:A3
int binary 保存进制 如:16
2.转换类
各种转换进制的成员函数
代码如下:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Number
{
private:
string num; //数
int binary; //进制 2~16
public:
Number(string n,int b); //构造函数
~Number(); //析构函数
string GetNum(){return num;}
int GetBinary(){return binary;}
};
class Convert
{
private:
int ii;
public:
int ToD(string num,int binary);
//转换为十进制
void ToN(string num,int binary,int n);
//转换为任意进制
char NumToChar(char num);
//将一数字转换为字符
int CharToNum(char num);
//将一字符转换为数字
};
int main()
{
string num;
int binary;
int n;
cout<<"输入一个数和其进制数(2~16):\n";
cin>>num>>binary;
Number N(num,binary);
Convert con;
con.ToD(N.GetNum(),N.GetBinary());
while(1)
{
cout<<"转换的进制(2~15):____\b\b\b";
cin>>n;
con.ToN(N.GetNum(),N.GetBinary(),n);
cout<<"\n";
}
return 0;
}
//构造函数
Number::Number(string n,int b)
{
num=n;
binary=b;
}
//析构函数
Number::~Number()
{
cout<<"析构函数被调用!\n";
}
//转换为十进制
int Convert::ToD(string num,int binary)
{
int len=num.size();
int decimal=0;
char t[10];
for(int i=0;i<len;i++)
{
decimal+=CharToNum(num[i])*pow(binary,len-i-1);
}
binary = 10;
sprintf(t,"%d",decimal);
num=t;
cout<<"转换为十进制后为:"<<decimal<<"\n";
return decimal;
}
//转换为任意进制
void Convert::ToN(string num,int binary,int n)
{
char temp;
string result;
int len=num.size();
int decimal=0;
for(int i=0;i<len;i++)
{
decimal+=CharToNum(num[i])*pow(binary,len-i-1);
}
while(decimal>0)
{
temp=decimal%n;
result+=NumToChar(temp);
decimal=decimal/n;
}
binary=n;
num="";
for(i=result.size()-1;i>=0;i--)
{
num+=result[i];
cout<<result[i];
}
}
//将一个整形数字转换为一个字符型数字
char Convert::NumToChar(char num)
{
if(num<=9&&num>=0)
num+=48;
else
switch(num)
{
case 10:num='A';break;
case 11:num='B';break;
case 12:num='C';break;
case 13:num='D';break;
case 14:num='E';break;
case 15:num='F';break;
}
return num;
}
//将一个字符型数字转化为整形数字
int Convert::CharToNum(char num)
{
if(num<='9'&&num>='0')
{
num-=48;
}
else
switch(num)
{
case 'A':
case 'a':num=10;break;
case 'B':
case 'b':num=11;break;
case 'C':
case 'c':num=12;break;
case 'D':
case 'd':num=13;break;
case 'E':
case 'e':num=14;break;
case 'F':
case 'f':num=15;break;
}
return num;
}