C语言实现整数转二进制并以数组输出的代码问题求助
问题排查
- 数组定义非法:
int x = 0; int a[x];定义了长度为0的数组,没有存储空间存放二进制位,int类型最多32位二进制,直接定义int a[32]即可满足需求 - 循环条件错误:循环判断条件
i < Num中的Num在循环体内会被Num = Num/2不断修改,导致循环次数远小于实际二进制位数,应该使用临时变量参与运算,保留原始数值 - 输出逻辑错误:仅输出
a[x]只会打印数组第一个元素,且存入的余数是二进制从低位到高位的顺序,需要倒序输出数组中所有有效位才能得到正确结果 - 冗余头文件:
<math.h>全程未使用,可以删除
修正后代码
#include <stdio.h> int main(void){ int Num; int i; // 32位数组覆盖所有int类型的二进制长度需求 int a[32] = {0}; // 记录实际二进制位数 int count = 0; scanf("%d", &Num); // 用临时变量参与运算,保留原始输入值 int temp = Num; while(temp > 0) { // 余数存在数组下标从小到大的位置,对应二进制低位到高位 a[count] = temp % 2; count++; temp = temp / 2; } printf("%d in base 2 is ", Num); // 倒序输出,从高位到低位打印 for(i = count - 1; i >= 0; i--) { printf("%d", a[i]); } return 0; }
运行验证
输入17时,数组依次存入1、0、0、0、1,倒序输出为10001,符合需求。
内容的提问来源于stack exchange,提问作者crvm
相关产品推荐
相关产品推荐

