[要是能进去看这里题面](https://kedaoi.cn/p/1479)
by jqQt0220 @ 2023-11-23 19:24:47
@[jqQt0220](/user/678175) 给个样例?好像看到过类似的
by __LiChangChao__ @ 2023-11-23 19:46:35
### 输入
```
1
2
3
4
5
0
```
### 输出
```
2
4
5
8
6
```
by jqQt0220 @ 2023-11-23 19:50:52
@[changwenxuan](/user/794383)
by jqQt0220 @ 2023-11-23 19:51:01
如果题意我没理解错的话(找到第一个比 $x$ 大的在二进制下 $1$ 的个数与 $x$ 相等的数 $y$),那这个代码应该是正确的:
```cpp
#include<bits/stdc++.h>
using namespace std;
unsigned func(unsigned n) {
unsigned x = n & -n;
return (n + x) | ((n ^ (n + x)) / x) >> 2;
}
int main() {
unsigned n;
while(~scanf("%lld",&n)&&n){
printf("%lld\n",func(n));
}
}
```
题意理解错了另当别论。
by __LiChangChao__ @ 2023-11-23 19:51:57
@[jqQt0220](/user/678175) 好了,我那代码过样例了
by __LiChangChao__ @ 2023-11-23 19:52:52
@[changwenxuan](/user/794383) 稍微解释一下代码,有点看不懂
by jqQt0220 @ 2023-11-23 20:35:22
@[jqQt0220](/user/678175) 某次模拟赛上的题面,那道题是要求改写成支持 $k$ 位无符号整数,鬼知道到底是怎么实现的。连 7 级 @[wxr_](/user/783628) 都证不出来。
by __LiChangChao__ @ 2023-11-23 20:55:35
@[changwenxuan](/user/794383) 你这代码是对的,但是我稍微改了改变量名,然后就 WA 了,看看咋回事:
```cpp
#include<bits/stdc++.h>
using namespace std;
// #define fileio
#define IOS
void ___()
{
#ifdef fileio
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
#ifdef IOS
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n'
#endif
}
#define ll long long
typedef unsigned int uint;
uint solve(uint x)
{
uint t=x&-x,n=x+t;
return n|((x^n)/x)>>2;
}
uint x;
int main()
{
___();
while(1)
{
cin>>x;
if(!x)
break;
cout<<solve(x)<<endl;
}
return 0;
}
```
by jqQt0220 @ 2023-11-24 18:33:55
哦豁,变量名改炸了,应该是除以 t 变成除以 x 了
by jqQt0220 @ 2023-11-24 18:46:06