用c++写十进制转任意进制
时间: 2023-08-29 20:12:46 浏览: 109
以下是使用C语言编写十进制转任意进制的函数代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* dec2base(int num, int base) {
char* res = (char*) malloc(sizeof(char) * 32);
int i = 0;
while (num > 0) {
int rem = num % base;
res[i] = (rem > 9) ? (rem - 10 + 'A') : (rem + '0');
i++;
num /= base;
}
if (i == 0) {
res[i] = '0';
i++;
}
res[i] = '\0';
strrev(res);
return res;
}
int main() {
int num, base;
char* res;
printf("Enter a decimal number: ");
scanf("%d", &num);
printf("Enter the base to convert to: ");
scanf("%d", &base);
res = dec2base(num, base);
printf("%d in base %d is %s\n", num, base, res);
free(res); // remember to free the memory allocated by malloc()
return 0;
}
```
解释:
- `dec2base` 函数接受两个参数:一个十进制整数 `num` 和一个目标进制 `base`,返回一个字符串,表示 `num` 在目标进制下的数值。
- 在函数内部,使用循环将 `num` 转换成目标进制的数值,并保存到一个字符串中。
- 字符串的每个字符表示目标进制下的一位数值,当余数大于 9 时,使用字母 A 到 Z 表示。因此在转换的过程中需要判断余数的值。
- 为了得到正确的结果,转换后的字符串需要反转一下,因为我们是从低位到高位转换的。
- 在主函数中,读取用户输入的十进制数和目标进制,并调用 `dec2base` 函数来进行转换。最后输出结果,并释放动态分配的内存。
注意:此程序只支持转换到进制 2 到 36 之间的数值。如果目标进制超过了这个范围,程序会出错。
阅读全文