啊好久没写了,更一篇完整程序:
/*
项目名称:进制转换器
时间:2022年11月17日 01:20:11
知识点:进制转换 字符数组运用 函数运用等
*/
#include <bits/stdc++.h>
using namespace std;
char *d_b(int input_d);//10进制转2进制
char *d_h(int input_d);//10进制转16进制
int b_d(char input_c[], int input_c_len); //2进制转10进制
int h_d(char input_c[], int input_c_len); //16进制转10进制
char *h_b(char input_c[], int input_c_len); //16进制转2进制
char *b_h(char input_c[], int input_c_len); //2进制转16进制
int main()
{
//界面绘制
cout << "************************************************" << endl;
cout << "****| 二进制、十进制、十六进制转换 |****" << endl;
cout << "****| 1、十进制转二进制 |****" << endl;
cout << "****| 2、十进制转十六进制 |****" << endl;
cout << "****| 3、二进制转十进制 |****" << endl;
cout << "****| 4、十六进制转十进制 |****" << endl;
cout << "****| 5、十六进制转二进制 |****" << endl;
cout << "****| 6、二进制转十六进制 |****" << endl;
cout << "************************************************" << endl;
cout << endl;
cout << "( ̄▽ ̄)ノ再见输入对应的数字1-6,即可选择相应的进制转换功能ヾ( ̄▽ ̄)" << endl;
int num = 0; //判断程序功能
int user_input_d = 0; //存放用户输入(10进制数)
char user_input_c[1000] = {' '}; //存放用户输入(2进制数,16进制数存这个里面)
//根据选择的功能,进行提示语
cin >> num;
switch (num)
{
case 1:
cout << "您要使用的是:十进制转二进制。请输入一个十进制数" << endl;
break;
case 2:
cout << "您要使用的是:十进制转十六进制。请输入一个十进制数" << endl;
break;
case 3:
cout << "您要使用的是:二进制转十进制。请输入一个二进制数" << endl;
break;
case 4:
cout << "您要使用的是:十六进制转十进制。请输入一个十六进制数" << endl;
break;
case 5:
cout << "您要使用的是:十六进制转二进制。请输入一个十六进制数" << endl;
break;
case 6:
cout << "您要使用的是:二进制转十六进制。请输入一个二进制数" << endl;
break;
default:
cout << "输入不正确,请关掉重启" << endl;
}
//根据用户输入的数字来决定用什么输入
if ((num == 1) || (num == 2))
cin >> user_input_d;
else
cin >> user_input_c;
//根据选择的功能,进行操作
switch (num)
{
case 1:
cout << d_b(user_input_d) << endl;
break;//十进制转二进制
case 2:
cout << d_h(user_input_d) << endl;
break;//十进制转十六进制
case 3:
cout << b_d(user_input_c, strlen(user_input_c) - 1);//实参为用户输入的字符数组与字符数组长度
break;//二进制转十进制
case 4:
cout << h_d(user_input_c, strlen(user_input_c) - 1);
break;//十六进制转十进制
case 5:
cout << h_b(user_input_c, strlen(user_input_c) - 1) << endl;
break;//十六进制转二进制
case 6:
cout << b_h(user_input_c, strlen(user_input_c) - 1) << endl;
break;//二进制转十六进制
default:
cout << "输入不正确,请关掉重启" << endl;
}
return 0;
}
//10进制转2进制自定义函数
char *d_b(int input_d)
{
cout << "对应的二进制数是:";
static char result[999];//10进制转2进制的结果用一个字符数组来存
int xb = 0; //下标遍历器
for (int a = input_d; a != 0; a /= 2)//短除法对这个十进制数不断的除2,得到的余数存在字符数组中
{
result[xb] = (a % 2) + 48; //对2取余只能得到两种结果1和0,用字符来表示'1',相当于是ASCII码值49;
xb++;
}
strrev(result);//由于存的取的余数是倒着的,所以翻转一次。
return result;//函数返回这个结果
}
//10进制转16进制自定义函数
char *d_h(int input_d)
{
cout << "对应的十六进制数是:";
static char result[999];//10进制转2进制的结果用一个字符数组来存
int xb = 0; //下标遍历器
for (int a = input_d; a != 0; a /= 16)//短除法对这个十进制数不断的除16,得到的余数存在字符数组中
{
//对16取余能得到15种结果0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;
if (a % 16 >= 10)
result[xb] = a % 16 + 55; //如果得出的余数>=10则用余数+55,比如得出的余数是11,11+55=66,字符代表'B'
else
result[xb] = a % 16 + 48; //如果得出的余数<10则用余数+48,比如得出的余数是0,0+48=48,字符代表'0'
xb++;
}
strrev(result);//由于存的取的余数是倒着的,所以翻转一次。
return result;//函数返回这个结果
}
//2进制转10进制自定义函数
int b_d(char input_c[], int input_c_len)//input_c_len是用户输入字符数组的长度
{
cout << "对应的十进制数是:";
int result = 0;//定义一个整型变量来存2转16的结果
for (int a = input_c_len; a >= 0; a--)//倒序遍历
{
//按权展开字符数组里的元素要转成整形减掉48,比如字符数组中存的是'1' '0' '0',1的ASCII是49 49-48=1
result = result + ((int)input_c[a] - 48) * pow(2, input_c_len - a);
}
return result;//函数返回这个结果
}
//16进制转10进制自定义函数
int h_d(char input_c[], int input_c_len)
{
cout << "对应的十进制数是:";
int result = 0;
for (int a = input_c_len; a >= 0; a--)
{
if (input_c[a] >= 'A')//如果数组元素是A~F 就减去55得到对应的10~15
result = result + ((int)input_c[a] - 55) * pow(16, input_c_len - a);
else//如果数组元素是A~F 就减去48得到对应的0~9
result = result + ((int)input_c[a] - 48) * pow(16, input_c_len - a);
}
return result;//函数返回这个结果
}
//16进制转2进制自定义函数
char *h_b(char input_c[], int input_c_len)
{
cout << "对应的二进制数是:";
int result_dec = h_d(input_c, input_c_len); //调用16转10自定义函数,然后得到一个整数结果
static char result[1000];
strcpy(result, d_b(result_dec)); //调用10转2自定义函数,将结果复制到result字符数组中
return result;//输出result字符数组
}
//2进制转16进制自定义函数
char *b_h(char input_c[], int input_c_len)
{
cout << "对应的十六进制数是:";
int result_dec = b_d(input_c, input_c_len); //调用2转10自定义函数,然后得到一个整数结果
static char result[1000];
strcpy(result, d_h(result_dec)); //调用10转16自定义函数,将结果复制到result字符数组中
return result;//输出result字符数组
}