_Phoebe__ 2022-02-08 23:13 采纳率: 96.9%
浏览 31
已结题

这个代码完全不理解 想知道是什么意思

链接:https://ac.nowcoder.com/acm/contest/23479/K
来源:牛客
小红拿到了一个正整数 xx 。她想构造一个正整数 yy,满足以下性质:

  1. yy 是 xx 的倍数,且 xx 和 yy 不能相等。
  2. xx 在二进制表示下(为一个01串)是 yy 的二进制表示的一个子串。且 xx 和 yy 的二进制表示的1的个数不能相同。
  3. yy 必须为不超过 10^{19}10
    19
    的正整数。
    举个例子:
    若 x=5x=5 :
    那么构造的 yy 不能是5,因为这样 yy 和 xx 相等,所以非法。
    也不能是 6,因为这样 yy 不是 xx 的倍数,所以非法。
    也不能是 10 ,因为这样 yy 的二进制表示是 1010、xx 的二进制表示是101,虽然 yy 是 xx 的倍数且 xx 的二进制是 yy 的一个子串,但它们的 '1' 的个数相同,所以非法。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll x;
    cin>>x;
    ll t=x;
    ll b=1;
    while(x)
    {
        x>>=1;
        b*=2;
    }
    cout<<t+t*b;
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 关注

    假设x=5,那么x的二进制为0101,x>>1表示x右移1位,即把最右边一位的1删掉,变为010,此时x=2;b2=2
    第二轮x>>1变为01 x=1 b=4
    第三轮x>>1变为0 x=0 b=8
    跳出循环
    t+t
    b=5+5*8=45 二进制位101101
    45是5的倍数,101是101101子串且1的个数不相等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据
  • ¥15 分别有什么商家下面需要非常多的骑手为它工作?