
求解代码
java
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
long n =Long.parseLong(str.trim());
int count = 0;
while (n > 0) {
count += n & 1;
n = n >> 1;
}
out.println(count);
out.flush();
out.close();
br.close();
}
小贴士
StreamTokenizer 的 in.nval 是 double 类型(64 位浮点数), 但 double 的有效整数精度只有 53 位,将其强转为 long(64 位整数)会造成精度丢失,所以这里需要用BufferedReader.readLine()读取字符串再转 long。