1673 - 神奇的工号

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

ACM俱乐部里员工的都有一个工号,这个工号的二进制表达中1的个数越多,这个员工的级别就越高。

输入一个工号,求这个工号的二进制表达中1的个数。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

题目输入

每组测试数据输入一行,每行输入一个整数(绝对值<=1000000)。

题目输出

每组测试数据输出一行,这个工号的二进制表达中1的个数。

输入/输出样例

输入格式

10
0
-32768

输出格式

2
0
17

C语言解答

/*
 * =====================================================================================
 *
 *       Filename:  902-1.c
 *
 *    Description: hahhahah 
 *
 *        Version:  1.0
 *        Created:  2013/9/2 21:01:28
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  mdk-vim.cpp-c (mdk), mengdaikun@gmail.com
 *        Company:  cjluacm-vim-mdk
 *
 * =====================================================================================
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

int numberof1_total(unsigned int n)
{
    unsigned int ret = 0;

    while(n)
    {
        if(n & 1)
            ret++;
        n = n >>1;
    }
    return ret;
}

int main()
{
   // freopen("a.in","r",stdin);

    int n;

    while(~scanf("%d",&n))
    {
        printf("%d\n",numberof1_total(n));
    }
    
    return 0;
}

C++解答

#include <stdio.h>
int NumberOf1_Solution2(int i)
{
      int count = 0;
      unsigned int flag = 1;
      while(flag)
      {
            if(i & flag)
                  count ++;

            flag = flag << 1;
      }

      return count;
}
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
		printf("%d\n",NumberOf1_Solution2(n));
	return 0;
} 

Java解答

import java.util.*;
import java.io.*;
import java.math.*;


public class Main{
	
	public static Scanner cin=new Scanner(System.in);
	
	public static void main(String []args){
		int n;
		int ans;
		while(cin.hasNext()){
			n=cin.nextInt();
			String s=Integer.toBinaryString(n);
			ans=0;
			for(int i=0;i<s.length();i++){
				if(s.charAt(i)=='1'){
					ans++;
				}
			}
			System.out.println(ans);
		}
	}
}