输入字符转换二进制求出1的个数问题

关于将整数转化成二进制的问题,我们常用的可以是itoa()这个函数,但是在一些OJ上,对于这个非标准函数的判定存在问题,所以最好还是自己能够掌握手动十进制转二进制的算法(短除法)为好。

/*题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

输入描述:
 输入一个整数(int类型)

输出描述:
 这个数转换成2进制后,输出1的个数
 */

#include<stdio.h>
#include<stdlib.h>


 
 int main()
 {
 	int a;
 	scanf("%d",&a);
 	int b,i=0;
    int str[100];
    //短除法将十进制转二进制,存进str数组中;

 	while(a!=0){
 		b = a/2;
 		str[i] = a-b*2;
 		a = a/2;
 		i++;
	 }	
    //注意,这个方法只是将十进制转成二进制数的逆序,对本题来说足够;如需正序的二进制,用栈打印出                
    //即可;
	 int count=0;
	for(int j=0;j<i;j++)
 	{
		 if(str[j]==1){
 			count++;
		 }
	 }
	printf("%d\n",count);
 	return 0;
  } 

当然,如果解决平时的问题,用itoa()函数也就足够了。【不会用?点这个,看十进制转二进制的两个常用方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值