C++唯一的零

描述

有一个叫做 Piggy 的小男孩,他是一个天生的天才数学家。他喜欢数学,喜欢用数学解决问题。

有一天,Piggy 发现一个非常有趣的问题:在一个区间内,有多少个整数的二进制表示恰好有一个0。他很兴奋,决定把这个问题告诉他的爸爸。

Piggy 的爸爸也是一个数学家,他告诉 Piggy 这个问题的答案,并且告诉他如何计算这个答案。Piggy 很高兴,他决定尝试用自己的方法解决这个问题。

输入

共一行,两个整数a和b。

输出

一个整数,表示满足条件的整数数量。

输入样例 1 

1 10

输出样例 1

3

输入样例 2 

0 0

输出样例 2

1

提示

【数据范围】

1≤a≤b≤10000000

【样例1解释】

1−10范围内:

2的 二进制(10)、5的 二进制(101)、6的 二进制(110 )中只包含一个0,所以输出3。

【样例2解释】

0的二进制(0),包含一个0,所以输出1。

#include<iostream>
using namespace std;
int main()
{
	int a,b,c=0,t=0,n,x,k=0;
	cin>>a>>b;
	for(int i=a;i<=b;i++)
	{
		if(i==0) k++;
		n=i;
		t=0;
		while(n!=0)
		{
			x=n%2;
			if(x==0)
			{
				t++;
			}
			n=n/2;
		}
		if(t==1)
		{
			k++;
		}
	}
	cout<<k;
	return 0;
}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值