十进制与n进制之间相互转换(代码)

十进制转 n 进制

#include
using namespace std;


//10进制转N进制
int Base10ToBaseN(unsigned int uiSrc, int iBse, char* pOutstr)
{
	int i = 0, mod = 0, divide = uiSrc;
	int len = 0;
	char tmpc = '0';
	while (divide / iBse > 0 || (divide > 0 && divide < iBse))
	{
		mod = divide % iBse;
		if (mod >= 10)	//大于10的要转为大写字母
		{
			tmpc = mod - 10 + 'A';
		}
		else
		{
			tmpc = mod + '0';
		}
		pOutstr[i] = tmpc;
		i++;
		divide = divide / iBse;
	}
	//数组转置
	len = strlen(pOutstr);
	for (int j = 0; j < len / 2; j++)
	{
		tmpc = pOutstr[j];
		pOutstr[j] = pOutstr[len - 1 - j];
		pOutstr[len - 1 - j] = tmpc;
	}
	return 0;
}
int main()
{
	char str[200];
	int number = 0;
	int result = 0;
	unsigned int in10 = 0;
	char str_result[200] = { 0 };
	unsigned int ibase = 0;

	//10进制转N进制

	cout << "请输入10进制数:" << endl;
	cin >> in10;
	cout << "请输入要转成的进制:" << endl;
	cin >> ibase;

	Base10ToBaseN(in10, ibase, str_result);

	cout << ibase << "进制输出结果:" << str_result << endl;

	return 0;
}

代码讲解

这段代码实现了一个将十进制数转换为任意进制数的功能。下面是代码的原理和方法:

  1. 函数声明:
int Base10ToBaseN(unsigned int uiSrc, int iBse, char* pOutstr);

这是一个函数声明,说明有一个名为Base10ToBaseN的函数,该函数接收三个参数:

  • uiSrc:一个无符号整数,表示要转换的十进制数。
  • iBse:一个整数,表示目标进制。
  • pOutstr:一个字符指针,用于存储转换后的字符串。
  1. 函数实现:

Base10ToBaseN函数的工作原理如下:

  • 使用一个循环,通过连续取模和整除操作,将十进制数转换为指定进制的数。
  • mod变量存储每次取模的结果,即当前位的数值。
  • 如果mod大于或等于10,则将其转换为大写字母(例如,11-15被转换为B-F)。否则,将其转换为相应的数字字符(0-9)。
  • 将转换后的字符存储在pOutstr字符串中。
  • 在循环结束后,字符串是逆序的(即最低有效位在最前面),所以进行一个简单的字符串转置操作。
  1. 主函数:

主函数首先声明了一些变量,然后通过cin获取用户输入的两个值:要转换的十进制数(in10)和目标进制(ibase)。然后调用Base10ToBaseN函数进行转换,并输出结果。
4. 注意事项:

这个代码示例有几个值得注意的地方:

  • 代码中缺少对用户输入的有效性检查(例如,确保用户输入的是有效的十进制数和有效的进制)。在实际应用中,应该添加这样的检查以确保程序的健壮性。
  • 在代码中可以看到数组str_result[200]被初始化,但在实际使用时并没有用到这个数组。这可能是代码的一个遗留部分或错误。
  • 代码中的注释是用中文写的,这没有问题,但为了更通用和方便其他开发者理解,最好使用英文注释。

n 进制转十进制

#include
using namespace std;

//N进制转十进制
int BaseNToBase10(const char* plnStr, const int iBase)
{
	int sum = 0;
	int tempn = 0;
	char tempc = plnStr[0];

	int len = strlen(plnStr);
	for (int i = 0, j = len - 1; j >= 0; j--)
	{
		tempc = plnStr[j];
		if (tempc >= '0' && tempc <= '9')
		{
			tempn = tempc - '0';
			//cout << tempn << endl;
		}
		else if (tempc >= 'A' && tempc <= 'Z')
		{
			tempn = 10 + tempc - 'A';
			//cout << tempn << endl;
		}
		sum += tempn * pow(iBase, i);
		i++;

	}

	return sum;
}
int main()
{
	char str[200];
	int number = 0;
	int result = 0;
	unsigned int in10 = 0;
	char str_result[200] = { 0 };
	unsigned int ibase = 0;

	//N进制转十进制
	cout << "请输入n进制数:" << endl;
	cin >> str;
	cout << "请输入当前进制:" << endl;
	cin >> number;

	result = BaseNToBase10(str, number);

	cout << "十进制输出结果:" << result << endl << endl;

	return 0;
}

代码讲解

这段代码是一个C++程序,用于将任意进制(N进制)的数转换为十进制数。以下是代码的详细解释:

  1. 头文件引入:
#include

这行代码引入了iostream头文件,以便使用输入输出流(如cincout)。
2. 函数声明:

int BaseNToBase10(const char* plnStr, const int iBase);

这是一个函数声明,函数名为BaseNToBase10,它接收两个参数:一个字符指针plnStr(表示要转换的数)和一个整数iBase(表示当前进制)。函数返回一个整数,表示转换后的十进制数。
3. 函数实现:
函数BaseNToBase10的工作原理如下:

  • 初始化变量sum为0,用于存储转换后的十进制数。
  • 初始化变量tempn为0,用于临时存储当前位的数值。
  • 初始化变量tempc为输入字符串的第一个字符。
  • 使用strlen函数获取输入字符串的长度。
  • 使用for循环遍历字符串中的每个字符,从后往前遍历(因为最低有效位在最前面)。
  • 对于每个字符,检查它是否是数字字符(0-9)或大写字母(A-Z)。如果是数字字符,则直接将其转换为整数。如果是大写字母,则将其转换为相应的数字(A-Z对应于10-35)。
  • 将当前位的数值乘以当前的进制数,并累加到总和中。
  • 最后返回总和作为转换后的十进制数。
  1. 主函数:
    主函数首先声明了一些变量,然后通过cin获取用户输入的两个值:要转换的数(存储在字符串str中)和当前进制(存储在整数number中)。然后调用BaseNToBase10函数进行转换,并输出结果。
  2. 注意事项:
  • 该代码只支持将大写字母转换为数字(例如,A-Z对应于10-35)。如果需要支持小写字母或其他字符,则需要修改代码。
  • 代码中没有对用户输入进行有效性检查。在实际应用中,应该添加适当的检查以确保输入是有效的。

你可能感兴趣的:(C++知识点,算法)