下面是一个C语言程序,实现将一个十进制整数转换为二进制,然后反序,最后再转换回十进制整数的过程:
#include <stdio.h>
int main() {
int decimal, binary, reverseBinary, remainder, result = 0;
printf("请输入一个十进制整数:");
scanf("%d", &decimal);
// 使用while循环将十进制转换为二进制
binary = decimal;
while (binary > 0) {
remainder = binary % 2; // 计算余数作为二进制位
result = result * 10 + remainder; // 将二进制位添加到结果字符串的前面(反序)
binary /= 2; // 除以2继续转换
}
// 当二进制数为0时,说明原数为0
if (result == 0) {
result = '0'; // 使用字符0而不是整数0来表示
}
// 将二进制反序后的字符串转换为十进制整数
// 由于前面是反序得到的二进制数,这里顺次读取每一位即可
reverseBinary = result; // 最初结果就是反序二进制
while (reverseBinary > 0) {
remainder = reverseBinary % 10; // 取最低位二进制
result = result * 2 + remainder; // 二进制转十进制
reverseBinary /= 10; // 去掉最低位
}
printf("转换后的十进制整数是:%d\n", result);
return 0;
}
这个程序首先读取用户输入的十进制整数,并将其存储在变量decimal
中。然后使用一个while
循环来将这个十进制整数转换为二进制,存储在binary
中,并将其每一位反序存储在字符串变量result
中。
之后,再次使用一个while
循环,这次是将反序后的二进制字符串reverseBinary
转换回十进制整数,并将结果存储在result
中。
注意,为了简化程序,这里使用了整数来处理二进制位,这意味着在实际应用中可能需要考虑数字的大小限制,避免溢出。