您的位置:首页 > 其它

任意的进制转换

2017-06-12 22:45 225 查看

任意进制转换

/*
File name:任意进制转换.cpp
Author:杨柳
Date:2017/5/30
IDE:DEV-c++
算法思想:首先应该将任意进制number1转化为十进制的数number2,然后再将十进制数转化为任意进制进制的数number3。
*/
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;

//转化类
class Shift

{

private:
string num;
int binary;
public:

Shift(){}; //构造函数
int convertToDecimal(string num,int binary);//将任意进制转化为十进制
void decimalToAnyBinary(int decimal,int binary);//将十进制转化为任意进制
void ToAnyBinary(string num,int f_binary,int binary);//将任意进制转化为任意进制
char numToChar(int num);//将一个整型数字转化成字符型数字
int charToNum(char num);//将一个字符型数字转化成整型数字
};

//将一个整型数字转化成字符型数字
char Shift::numToChar(int num)
{

//num在0-9
if(num<=9&&num>=0)
{
num+=48;
}

//num在10-15
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 Shift::charToNum(char num)
{
//num在'0'-'9'
if(num<='9'&&num>='0')
{
num-=48;
}

//num在'A/a'到'F/f'
else
{
switch(num)
{
case 'A':
case 'a':
num=10;
case 'B':
case 'b':
num=11;
case 'C':
case 'c':
num=12;
case 'D':
case 'd':
num=13;
case 'E':
case 'e':
num=14;
case 'F':
case 'f':
num=15;
}
}
return num;
}

//将任意进制整数转化为十进制整数
int Shift::convertToDecimal(string num,int binary)  //num为任意进制整数,binary为该整数的进制
{
int len=num.size();
int decimal_num=0;
for(int i=0;i<len;i++)
{
decimal_num+=charToNum(num[i])*pow(binary,len-i-1);
}
return decimal_num;
}

/*将十进制转化为任意进制,decimal为十进制整数,binary为需要转化的进制*/
void Shift::decimalToAnyBinary(int decimal,int binary)
{
string result;//保存结果
char temp;
while(decimal)
{
temp=decimal%binary;
result+=numToChar(temp);  //结果连在字符串后
decimal=decimal/binary;
}
//输出结果
for(int i=result.size()-1;i>=0;i--)
cout<<result[i];
cout<<endl;
}

//将任意进制转化为任意进制
void Shift::ToAnyBinary(string num,int f_binary,int binary) {
int decimal_num;
decimal_num=convertToDecimal(num, f_binary);  //先转换十进制
decimalToAnyBinary(decimal_num, binary);
}

int main()
{
Shift sh;
//	cout<<sh.convertToDecimal("110", 2);//110为为二进制转换为十进制
sh.ToAnyBinary("12aF",16,2); //十六进制12aF转换成二进制
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: