slgqhcsdn 2022-02-05 20:47 采纳率: 76.9%
浏览 39
已结题

一道进制转换,c++代码求解

题目描述
小s最近对数字情有独钟。他又发现了一种神奇的数字。对于数x,如果它二进制表示中只有一位是0,则x就会被小s所喜爱。比如5,二进制为101,则它被小s所喜爱。
现在,小s想知道,对于一个区间[L, R],有多少数是他所喜爱的。

输入格式
输入包含多组数据。
输入第一行T,表示数据组数。
每组数组仅有一行,包含两个正整数L, R。

输出格式
对于每组数据输出一行,表示答案。

输入样例
2
5 10
2015 2015
输出样例
2
1
数据范围与提示
【数据范围与约定】
30%: L, R <= 10^6, T <= 10
60%: L, R <= 10^10, T <= 100
100%: L, R <= 10^18, T <= 10000

  • 写回答

2条回答 默认 最新

  • slgqhcsdn 2022-02-18 18:32
    关注
    
    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=210;
    const int mod=998244353;
    const int MOD=10010;
    long long n,m,k,sum,cnt,a[MAXN],b[MAXN],dp[MAXN],t;
    char str[MAXN],s[MAXN];
    long long qpow(long long a,long long b){
        long long ans=1;
        while(b){
            if(b&1){
                ans=(ans*a);
            }
            a=(a*a);
            b/=2;
        }
        return ans;
    } 
    int main(){
        cin>>t;
        a[0]=1;
        for(int i=1;i<=200;i++){
            a[i]=a[i-1]+i-1;
        }
        while(t--){
            cin>>n>>m;
            sum=0;
            for(long long i=0;i<=200;i++)
                if(m<qpow(2,i)){
                    k=i;
                    break;
                }
            long long x=qpow(2,k)-1;
            for(long long i=k-2;i>=0;i--){
                if(m>=(x-qpow(2,i))){
                    sum++;
                }
            }
            for(long long i=1;i<=200;i++){
                if(n<qpow(2,i)){
                    cnt=i;
                    break;
                }
            }   
            long long y=qpow(2,cnt)-1;
            for(long long i=0;i<cnt-1;i++){
                if(n<=(y-qpow(2,i))){
                    sum++;
                }
            }
            sum+=a[k-1]-a[cnt];
            cout<<sum<<endl;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 2月5日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。