链接:https://ac.nowcoder.com/acm/contest/23479/K
来源:牛客
小红拿到了一个正整数 xx 。她想构造一个正整数 yy,满足以下性质:
#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;
}
假设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+tb=5+5*8=45 二进制位101101
45是5的倍数,101是101101子串且1的个数不相等。
你哪里不明白?
ll是long long 开始用键盘输入,赋值给x
通过while循环,b进行倍乘,
最后t+t*b输出