今天是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 结束循环,后面就就是输出我们的数组组成一个二进制数。
#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 结束循环,后面就就是输出我们的数组组成一个二进制数。