c语言【问题描述】输入一个十进制数,输出对应的八进制数和十六进制数。 【输入】一个十进制数字 【输出】对应的八进制数和十六进制数(字母用大写),用英文逗号隔开,逗号后面有个空格 【样例输入】10 【样例输出】12, A
时间: 2024-10-01 16:04:31 浏览: 72
C语言实现十六进制数据转十进制数据
在C语言中,可以使用内置函数 `octave()` 和 `itoa()` 来将十进制数转换成八进制和十六进制。但是,这两个函数并不是标准库的一部分,因此我们需要自定义实现或者使用第三方库如 `<stdlib.h>` 中的 `sprintf()` 函数。下面是一个简单的示例:
```c
#include <stdio.h>
// 自定义八进制转换函数,不是标准库提供的
char* oct_to_str(int num) {
char result[11] = {0}; // 保证足够的空间
int i = 8 - 1;
while (num > 0) {
result[i++] = '0' + num % 8;
num /= 8;
}
if (i == 0)
result[0] = '0';
else
result[i] = '\0';
reverse(result); // 反转数组,因为八进制从高位开始存储
return result;
}
// 自定义十六进制转换函数,同样不是标准库提供的
char* hex_to_str(int num) {
char result[7]; // 保证足够的空间
int i = 6;
if (num <= 9) {
result[i--] = '0' + num;
} else {
result[i--] = 'A' + num - 10;
}
while (num >= 16) {
num /= 16;
if (num <= 9) {
result[i--] = '0' + num;
} else {
result[i--] = 'A' + num - 10;
}
}
if (result[0] == '\0')
result[0] = '0'; // 如果所有位都是0,添加一个'0'
return result;
}
void reverse(char* str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main() {
int decimal_num;
printf("请输入一个十进制数字:");
scanf("%d", &decimal_num);
char octal[11], hexadecimal[7];
reverse(octal);
reverse(hexadecimal);
sprintf(octal, "%o", decimal_num);
sprintf(hexadecimal, "%X", decimal_num);
printf("%s, %s\n", octal, hexadecimal);
return 0;
}
```
对于给定的样例输入10,这段代码将输出 "12, A"。
阅读全文