计算机中实现10进制转换成二进制c编程

  • 方法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);
  }
}

猜你喜欢

转载自blog.csdn.net/apanying/article/details/86514120