#includevoiddectobe(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后不要加
换行符,不然每一个二进制位都会换行if(i%4==0)//为了美观,四个二进制空一个空格printf(" ");}printf("
");}intmain(int argc,charconst*argv[]){int n;printf("input number
");scanf("%d",&n);//getchar();吃掉垃圾字符是用于吃掉上次使用留下的回车。如果接下来还有一个scanf函数,在函数前用getchar吃掉,或者用%*c抑制符。对于int类型的无需吃掉,char类型的要吃掉。dectobe(n);return0;}
//2013年华为c语言上机试题2
//计算一个整数二进制表达式中0的个数
方法1
#includeintcount(int n){int count=0;while(n){
n/=2;
count++;}return(count-1);//count++之后多加了一个,要减去}intmain(int argc,charconst*argv[]){int n;printf("input number
");scanf("%d",&n);printf("%d
",count(n));return0;}
方法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//计算整数中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;
}
}*/voidnumzero(int k,int*zeronum){(*zeronum)=0;while(k !=0){if((k &1)==0){(*zeronum)++;}
k >>=1;}}voidmain(){int i;int temp;int num =0;printf("请输入一个整数
");
temp =scanf("%d",&i);while(temp ==1){numzero(i,&num);printf("%d的二进制数中0的个数为%d
", i, num);printf("请输入下一个整数,输入其它字符结束
");
temp =scanf("%d",&i);}}