题目 描述
现在小炫刚和同学们学完数学中的“特殊的数字”一节,同学们开始互相出题;
同学们给出这样的一个定义:给定一个正整数n,它的“同一后继数”为比n大的最小整数x,且当x和n转换成二进制后,所含“1”的个数相同。
例如,n=78,将其转换成二进制后为“1001110”,含有4个“1”,而含有4个1的比“1001110”大的最小整数为“1010011”,其十进制数为83,即78的同一后继数为83。
输入描述
第一行为正整数t(≤1000),表示数据组数; 接下来每行一个正整数x(≤10^9)。
输出描述
对于每个正整数x,输出它的同一后继数,每个数一行。
用例输入 1
2 4 78 用例输出 1
8 83
我的代码:
#include<bits/stdc++.h>
using namespace std;
long long f(long long x) {
int ans = 0;
for(;x != 0;x &= (x-1)) ans++;
return ans;
}
int main(){
int t;
cin >> t;
while (t--) {
long long x;
cin >> x;
if(x == 0){
cout<<0;
}
long long ans = f(x);
while(1){
x++;
if(f(x) == ans){
cout<<x;
break;
}
}
cout<<endl;
}
return 0;
}
但全部样例还是没法通过
求大佬帮我改正,感谢