用c语言实现数制转换 【基本要求】 任意给定一个M进制的数X,请实现如下要求: (1)求M进制数X对应的10进制值; (2)实现M进制数X向任意的一个非M进制的数的转换。
时间: 2024-10-08 22:21:51 浏览: 71
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
在C语言中,我们可以使用循环结构和乘法运算来实现数制之间的转换。以下是两个函数,分别用于将M进制数转换成十进制和将十进制数转换成其他进制:
1. **M进制转十进制**:
```c
#include <stdio.h>
int decimalFromAnyBase(int number, int base) {
int decimal = 0;
int power = 0;
while (number != 0) {
int remainder = number % 10; // 取余数
decimal += remainder * pow(base, power); // 乘以当前位的权重
number /= 10; // 将数值缩小到整除10的位置
power++;
}
return decimal;
}
```
2. **十进制转其他进制**:
```c
#include <stdio.h>
void anyBaseToDecimal(int decimal, int target_base) {
if (target_base <= 0 || target_base > 36) {
printf("Invalid target base. Please use a base between 2 and 36.\n");
return;
}
char base_chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while (decimal > 0) {
int remainder = decimal % target_base;
printf("%c", base_chars[remainder]);
decimal /= target_base;
}
printf("\n");
}
// 调用示例:
int main() {
int m_arity_number = 12345; // M进制示例
int m_base = 5; // M的基数
int decimal_value = decimalFromAnyBase(m_arity_number, m_base);
printf("M进制 %d 转换成十进制是 %d\n", m_arity_number, decimal_value);
int new_base = 16; // 新的目标基数,十六进制
anyBaseToDecimal(decimal_value, new_base);
return 0;
}
```
阅读全文