关于将整数转化成二进制的问题,我们常用的可以是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()函数也就足够了。【不会用?点这个,看十进制转二进制的两个常用方法】