-
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目出处:九度 online judge
题目描述:
-
输入:
-
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。
-
输出:
-
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
-
样例输入:
-
3 4 5 -1
-
样例输出:
-
1 2 32
-
这道题目并不难,关键点主要是在求解过程采用何种省时、省事的运算方法,我采用的是位运算,个人感觉这个速度比较快。想要采用这种方式的童鞋一定要注意右移运算符,一定要采用无符号右移运算符“<<<”!我就是吃了这个亏-_-! 下面上代码。
-
import java.io.StreamTokenizer; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class P1513 { public static void main(String[] args) throws IOException { StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); while(st.nextToken() != StreamTokenizer.TT_EOF){ int inCount = (int)st.nval; for(int i=0; i<inCount; i++){ st.nextToken(); int n = (int)st.nval; int rst = 0; while(n != 0){ int m = n & 0x1; if(1 == m){ rst++; } n = n>>>1;//注意这里哦!!! } System.out.println(rst); }//end for } } }