【一本通】进制转换
💐The Begin💐点点关注,收藏不迷路💐
|
编程输入十进制整数N(N:-32767~32767),请输出它对应的二进制、八进制、十六进制数。
输入
十进制整数N(N:-32767~32767)
输出
输出转成的2进制数、8进制数、16进制数,用空格分隔
样例输入 1
12
样例输出 1
1100 14 C
样例输入 2
-15
样例输出 2
-1111 -17 -F
#include <stdio.h>
int main() {
int n;
scanf(“%d”, &n);
if (n == 0) { // 特殊处理输入为0的情况
printf(“0 0 0\n”);
return 0;
}
if (n >= 0) {
int binary[16] = {0}; // 假设最多16位二进制数,用于存储每一位的值,初始化为0
int index = 0;
int temp = n;
while (temp > 0) {
binary[index++] = temp % 2; // 取余得到当前最低位的值并存入数组
temp /= 2;
}
for (int i = index - 1; i >= 0; i–) { // 从高位到低位输出二进制数
printf(“%d”, binary[i]);
}
printf(" ");
printf("%o ", n);
printf(“%X\n”, n);
} else {
// 对于负数,先求其补码形式的二进制表示(通过取反加1的方式)
n = -n;
int binary[16] = {0};
int index = 0;
int temp = n;
while (temp > 0) {
binary[index++] = temp % 2;
temp /= 2;
}
// 对得到的二进制位取反
for (int i = 0; i < index; i++) {
binary[i] = 1 - binary[i];
}
// 加1操作,模拟补码的形成(处理进位情况)
int carry = 1;
for (int i = 0; i < index; i++) {
int sum = binary[i] + carry;
binary[i] = sum % 2;
carry = sum / 2;
}
if (carry) { // 如果还有进位,扩展位数
binary[index++] = 1;
}
printf(“-”);
for (int i = index - 1; i >= 0; i–) { // 输出补码形式的二进制数
printf(“%d”, binary[i]);
}
printf(" ");
// 对于八进制和十六进制,直接按照补码对应的整数值进行转换输出
printf(“-%o “, -n);
printf(”-%X\n”, -n);
}
return 0;
}
💐The End💐点点关注,收藏不迷路💐
|