列表

详情


NC227585. 数字游戏

描述

在玩数字游戏,首先他拿到一个
不为零时进行如下操作
如果二进制中有奇数个,则二进制形式下最低位取反(即变成,变成
如果二进制中有偶数个,则二进制形式下非前导零最高位取反
询问对于一个,操作几次后变为零

输入描述

第一行一个正整数(1≤T≤1000000),表示询问组数
接下来T行,每行一个数x(0≤x≤1000000000)表示询问的数字
由于本题数据量比较大,请选择较快的读入方式

输出描述

输出T行,每行是对应的答案

示例1

输入:

3
0
1
5

输出:

0
1
2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 299ms, 内存消耗: 3320K, 提交时间: 2021-12-01 16:50:37

#include<iostream>
using namespace std;

int t,n,a,k,l,m;
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		a=n%2;
		k=0;
		while(n){
			if(n%2) k++;
			n/=2;	
		}
		l = 2*(k-a)+k%2;
	    printf("%d\n",l);		
	} 
}

上一题