求整数 1-n 总共出现1的个数 及 求整数的二进制中1的个数

继之前博文的补充(求整数位数,正序逆序输出,总计1的个数)https://blog.csdn.net/TUJI67/article/details/80381306

//todo 求1,2,3,4...总共出现1的个数 例如n=12(1,10,11,12),返回5个
//从1开始除以10取余,若余数为1,计数器加一,直到n取余为0结束,返回计时器即为所求。
int CountAlldOne(int n)
{
	int count = 0;
	int i,j;

	for(i = 1,j = i;i <= n;) //i表示当前循环的次数,j表示当前操作的数
	{
		while(j != 0)
		{
			if(j%10 == 1)
			{
				count++;
			}
			j/=10;
		}
		i++;
		j = i;//每次j操作完后都变为0,需要i重新赋值
	}
	return count;
}
//统计数字的二进制中1的个数 例如8->1,5->2,11->3 int Bits(int n)
//将十进制数转换为二进制数,再用以上求所有1的方法求
int CountAllbOne(int n)
{
	int count = 0;
	int b[32]; //b[32] 表示整型的4字节(即32位,模拟二进制)
	int t=0;
	while(n != 0) //统计转为二进制后有几位,并给每一位赋值
	{
		{
			b[t]=n % 2;
			n /= 2;
			t++;
		}
	}
	int i = 0;
	while(i < t)
	{
		count += (b[i] % 10 == 1) ? 1:0; //统计有几个1
		i++;
	}

	return count;
}
//统计数字的二进制中1的个数
int CountAllbOne(int n)
{
	int count = 0;
	int b[32];
	int t=0;
	while(n != 0)
	{
		b[t] = n%2;
		n /= 2;
		if(b[t] == 1) //在将整数转为二进制时,直接判断每一位是否为1,是1计数器count就加一
		{
			count += 1;
		}
		t++;
	}
	
	return count;
}

 

你可能感兴趣的:(求整数 1-n 总共出现1的个数 及 求整数的二进制中1的个数)