求助悬棺
  • 板块学术版
  • 楼主kkksc82
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/22 21:51
  • 上次更新2024/3/22 22:19:02
查看原帖
求助悬棺
1029253
kkksc82楼主2024/3/22 21:51

题目 描述

现在小炫刚和同学们学完数学中的“特殊的数字”一节,同学们开始互相出题;

同学们给出这样的一个定义:给定一个正整数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;
}

但全部样例还是没法通过

求大佬帮我改正,感谢

2024/3/22 21:51
加载中...