- 方法1(代码附上,暂时未行通,有兴趣可以修改一下)
- #include <stdio.h>
int dectobe(int n)
{
int temp=n;
int k=1;
int result=0;
int i;
while(temp)
{
i=temp%2;
result=k*i+result;
k=k*10;
temp=n/2;
printf("%d\n",result);
}
printf("%d\n",result);
return result;
}
int main(int argc, char const *argv[])
{
int n=15;
int result;
//printf("input number\n");
//scanf("%d",&n);
//getchar();
result=dectobe(n);
printf("%d\n",result );
return 0;
}
算法分析:
在实现模2取余后需要逆序输出,这个地方通过不断乘以10来实现后一位比前一位的位数多10,不需要再通过数组或者逆序函数来实现。
- 方法2
#include <stdio.h>
void dectobe(int n)
{
int i=0;
int a[32]={0};
while(n)
{
a[i++]=n%2;
n/=2;
}
for(i = i-1; i >=0; i--)//注意不要重复定义i的类型
{
printf("%d",a[i]);//%d后不要加\n换行符,不然每一个二进制位都会换行
if(i%4==0) //为了美观,四个二进制空一个空格
printf(" ");
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int n;
printf("input number\n");
scanf("%d",&n);
//getchar();吃掉垃圾字符是用于吃掉上次使用留下的回车。如果接下来还有一个scanf函数,在函数前用getchar吃掉,或者用%*c抑制符。对于int类型的无需吃掉,char类型的要吃掉。
dectobe(n);
return 0;
}
//2013年华为c语言上机试题2
//计算一个整数二进制表达式中0的个数
- 方法1
#include <stdio.h>
int count(int n)
{
int count=0;
while(n)
{
n/=2;
count++;
}
return (count-1);//count++之后多加了一个,要减去
}
int main(int argc, char const *argv[])
{
int n;
printf("input number\n");
scanf("%d",&n);
printf("%d\n",count(n));
return 0;
}
- 方法2
- 先说一下scanf的返回值
scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
如:scanf("%d %d",&a,&b);函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。
#include<stdio.h>
//计算整数中0的个数,下面的方法用移位的操作,更加简单一些
/*void numzero(int k, int*zeronum)
{
int i;
int remin;
int inter;
(*zeronum) = 0;
i = k;
inter = i / 2;
remin = i % 2;
while(inter)
{
if(remin == 0)
{
(*zeronum)++;
}
remin = inter % 2;
inter = inter / 2;
}
}*/
void numzero(int k, int*zeronum)
{
(*zeronum) = 0;
while(k != 0)
{
if((k & 1) == 0)
{
(*zeronum)++;
}
k >>= 1;
}
}
void main()
{
int i;
int temp;
int num = 0;
printf("请输入一个整数\n");
temp = scanf("%d", &i);
while(temp == 1)
{
numzero(i, &num);
printf("%d的二进制数中0的个数为%d\n", i, num);
printf("请输入下一个整数,输入其它字符结束\n");
temp = scanf("%d", &i);
}
}