题目描述
输入一个十进制数,转换为对应的二进制、八进制、十六进制数输出
输入
输入一个十进制数
输出
输出该十进制数对应的二进制、八进制、十六进制数
输入输出样例
样例输入 #1
10
样例输出 #1
bin:1010
oct:12
hex:A
提示
使用输出格式控制符 bin oct hex
设计思路:将一个十进制整数转换为二进制、八进制和十六进制,并打印出结果。代码利用 scanf
函数读取用户输入的整数,并通过 tenToTwo
、tenToEight
和 tenToSixteen
三个函数分别执行转换。tenToTwo
函数使用数组和 while
循环将整数转换为二进制,并按从高位到低位的顺序输出结果;tenToEight
函数类似,但进行的是八进制转换;tenToSixteen
函数则将整数转换为十六进制,处理时考虑了字符 ‘0’-‘9’ 和 ‘A’-‘F’ 的转换。
har arr[100];
:使用字符数组存储十六进制字符(0-9 和 A-F)。int a = ten % 16;
:取余数来获取当前位的十六进制值。if (a >= 10 && a <= 15)
:判断值是否在 A-F 的范围内,并进行相应的字符转换。printf("hex:");
:打印十六进制的前缀。for (int i = length - 1; i >= 0; i--)
:从数组的最后一位到第一位输出十六进制表示。
代码:
#include <stdio.h>
void tenToTwo(int ten); // 函数声明
void tenToEight(int ten); // 函数声明
void tenToSixteen(int ten); // 函数声明
int main() {
int ten;
scanf("%d", &ten); // 使用 &ten
tenToTwo(ten);
tenToEight(ten);
tenToSixteen(ten);
return 0;
}
// 十进制转换成二进制
void tenToTwo(int ten) {
int arr[100], length = 0;
if (ten == 0) {
printf("bin:0\n");
return;
}
while (ten) {
arr[length++] = ten % 2;
ten /= 2;
}
printf("bin:");
for (int i = length - 1; i >= 0; i--) {
printf("%d", arr[i]);
}
printf("\n");
}
// 十进制转换成八进制
void tenToEight(int ten) {
int arr[100], length = 0;
if (ten == 0) {
printf("oct:0\n");
return;
}
while (ten) {
arr[length++] = ten % 8;
ten /= 8;
}
printf("oct:");
for (int i = length - 1; i >= 0; i--) {
printf("%d", arr[i]);
}
printf("\n");
}
// 十进制转换成十六进制
void tenToSixteen(int ten) {
char arr[100];
int length = 0;
if (ten == 0) {
printf("hex:0\n");
return;
}
while (ten) {
int a = ten % 16;
char c;
if (a >= 10 && a <= 15) {
c = a + 55; // A-F
} else {
c = a + 48; // 0-9
}
arr[length++] = c;
ten /= 16;
}
printf("hex:");
for (int i = length - 1; i >= 0; i--) {
printf("%c", arr[i]);
}
printf("\n");
}
编译结果:
标签:十六进制,arr,ten,int,length,printf,八进制,十进制 From: https://blog.csdn.net/m0_73875968/article/details/140793509