记录自已学习之面试题3

        今天是8月22号,确实是一个好日子重新开始。煽情的话不说了,直接进正文吧。前几天做了一个公司的网上面试题,我感觉有许多的东西还是不会呀,基本就是考C语言的放东西,但是就是做不出来。有一题我是很深刻的,就是一个编程题,让你把一个十进制数转化成一个二进制数的编程题。我硬是想了很久也只能编出来一点,可能是我的功力还是不行,所以才是这样的,但是我需要记录下来,和大家分享一下。

#include <stdio.h>


int main(void)
{
unsigned int cnt = 0, num = 0, ret = 0;
unsigned int group[20] = {0};
printf("请输入一个大于等于0的数\n");
scanf("%d", &num);
#if 0
while (num != 0)
{
ret = num % 2;
num /= 2;
group[cnt] = ret; //首先是cnt是等于零的,所以数是正确的,但是由零开始的。
cnt++; //最后再出去之前还是执行了一次加加,所以是比正常的大于一
//printf("%d", ret);
}
#endif


do {
ret = num % 2; //与是不是do....while是没有关系的
num /= 2;
group[cnt] = ret;
cnt++;
}while(num != 0);


printf("%d\n", cnt);

printf("它的二进制数时: ");

while (cnt != 0)
{
printf("%d", group[--cnt]); //由于是由零开始的,所以就开始需要减减,先把最大的减出。
}
printf("\n");
return 0;
}


先上了程序,这是我后来想到的程序,顺便还帮我复习了一下while 和 do......while这个进入口。 其实这道程序题的核心就在第一个循环那里,ret = num % 2; 第一个用于确定该位为1还是为0(有余数的话就是说这个为是1,没有余数的话这个位就是0),num /= 2; 第二个式子就是用于确定是第几位,也就是二进制数的第几个位。group[cnt] = ret; 这个式子是给位赋值,把余数赋给该位。cnt++; 记录这里一共用了几位数。现在我来大体的说一下思路,刚刚进入循环的时候就是取的是第一位,也就是二进制数的最低位,2的0次方,后面的那个式子就是除去2,就是向高位递进一位,也就是2的一次方,这样依次直到num = 0 结束循环,后面就就是输出我们的数组组成一个二进制数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值