十进制转 n 进制
#include<iostream>
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;
}
代码讲解
这段代码实现了一个将十进制数转换为任意进制数的功能。下面是代码的原理和方法:
- 函数声明:
int Base10ToBaseN(unsigned int uiSrc, int iBse, char* pOutstr);
这是一个函数声明,说明有一个名为Base10ToBaseN
的函数,该函数接收三个参数:
uiSrc
:一个无符号整数,表示要转换的十进制数。iBse
:一个整数,表示目标进制。pOutstr
:一个字符指针,用于存储转换后的字符串。
- 函数实现:
Base10ToBaseN
函数的工作原理如下:
- 使用一个循环,通过连续取模和整除操作,将十进制数转换为指定进制的数。
mod
变量存储每次取模的结果,即当前位的数值。- 如果
mod
大于或等于10,则将其转换为大写字母(例如,11-15被转换为B-F)。否则,将其转换为相应的数字字符(0-9)。 - 将转换后的字符存储在
pOutstr
字符串中。 - 在循环结束后,字符串是逆序的(即最低有效位在最前面),所以进行一个简单的字符串转置操作。
- 主函数:
主函数首先声明了一些变量,然后通过cin
获取用户输入的两个值:要转换的十进制数(in10
)和目标进制(ibase
)。然后调用Base10ToBaseN
函数进行转换,并输出结果。
4. 注意事项:
这个代码示例有几个值得注意的地方:
- 代码中缺少对用户输入的有效性检查(例如,确保用户输入的是有效的十进制数和有效的进制)。在实际应用中,应该添加这样的检查以确保程序的健壮性。
- 在代码中可以看到数组
str_result[200]
被初始化,但在实际使用时并没有用到这个数组。这可能是代码的一个遗留部分或错误。 - 代码中的注释是用中文写的,这没有问题,但为了更通用和方便其他开发者理解,最好使用英文注释。
n 进制转十进制
#include<iostream>
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进制)的数转换为十进制数。以下是代码的详细解释:
- 头文件引入:
#include<iostream>
这行代码引入了iostream
头文件,以便使用输入输出流(如cin
和cout
)。
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)。
- 将当前位的数值乘以当前的进制数,并累加到总和中。
- 最后返回总和作为转换后的十进制数。
- 主函数:
主函数首先声明了一些变量,然后通过cin
获取用户输入的两个值:要转换的数(存储在字符串str
中)和当前进制(存储在整数number
中)。然后调用BaseNToBase10
函数进行转换,并输出结果。 - 注意事项:
- 该代码只支持将大写字母转换为数字(例如,A-Z对应于10-35)。如果需要支持小写字母或其他字符,则需要修改代码。
- 代码中没有对用户输入进行有效性检查。在实际应用中,应该添加适当的检查以确保输入是有效的。