c语言n进制数转m进制数
时间: 2024-05-12 20:20:02 浏览: 105
这里提供一种通用的算法,可以将任意进制的数转换为另一种任意进制的数。
1. 将原始数转换为十进制数。
对于一个n进制的数,每一位上的数字乘以n的幂次方,然后将所有结果相加,即可得到该数的十进制表示。
例如,将二进制数1011转换为十进制数:
1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 11
2. 将十进制数转换为目标进制数。
将十进制数除以目标进制数,得到商和余数。将余数作为目标进制数的一个数字,将商作为新的十进制数,重复以上步骤,直到商为0为止。最后将所有余数按照从低位到高位的顺序排列,就得到了目标进制表示的数。
例如,将十进制数11转换为八进制数:
11 ÷ 8 = 1 ... 3
1 ÷ 8 = 0 ... 1
所以,11的八进制表示为13。
完整的代码实现如下:
```c
#include <stdio.h>
char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void reverse(char *str) {
int length = 0;
while (str[length] != '\0') {
length++;
}
for (int i = 0; i < length / 2; i++) {
char temp = str[i];
str[i] = str[length - i - 1];
str[length - i - 1] = temp;
}
}
void convert(char *input, int sourceRadix, int targetRadix, char *output) {
int value = 0;
for (int i = 0; input[i] != '\0'; i++) {
int digit = 0;
if (input[i] >= '0' && input[i] <= '9') {
digit = input[i] - '0';
} else if (input[i] >= 'A' && input[i] <= 'Z') {
digit = input[i] - 'A' + 10;
} else if (input[i] >= 'a' && input[i] <= 'z') {
digit = input[i] - 'a' + 10;
}
value = value * sourceRadix + digit;
}
int index = 0;
while (value > 0) {
int remainder = value % targetRadix;
output[index++] = digits[remainder];
value /= targetRadix;
}
if (index == 0) {
output[index++] = '0';
}
output[index] = '\0';
reverse(output);
}
int main() {
char input[100];
printf("Enter the number to convert: ");
scanf("%s", input);
int sourceRadix, targetRadix;
printf("Enter the source radix: ");
scanf("%d", &sourceRadix);
printf("Enter the target radix: ");
scanf("%d", &targetRadix);
char output[100];
convert(input, sourceRadix, targetRadix, output);
printf("%s (%d) = %s (%d)\n", input, sourceRadix, output, targetRadix);
return 0;
}
```
这个程序可以将任意进制的数转换为任意进制的数,使用方法如下:
1. 运行程序。
2. 输入要转换的数字。
3. 输入原始进制。
4. 输入目标进制。
5. 程序会输出转换后的数字。
阅读全文