求解代码
publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));PrintWriterout=newPrintWriter(newOutputStreamWriter(System.out));Stringstr=br.readLine();longn=Long.parseLong(str.trim());intcount=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。