Raising Bacteria——个人c++解

来源:互联网 发布:java项目案例分析 编辑:程序博客网 时间:2024/05/20 05:05

Description

You are a lover of bacteria so you want to raise some bacteria in a box. Initially, the box is empty. Every morning, you can put any number of bacteria into the box. Every night every bacterium in the box will split into two bacteria. You hope to see exactlyxx bacteria in the box at some moment. What is the minimum number of bacteria you need to put into the box across those days?

 

Input

There are several test cases. Each case contains only one integer xx(1x109)(1≤x≤109) a line.

 

Output

For each case, output the only line containing one integer: the answer.

 

Sample Input

58

 

Sample Output

2

1


#include<bits/stdc++.h>using namespace std;int main(){    long long int i,j,n,l,q,k;    long long int b[32];    b[0]=1;    for(i=0;i<31;i++)//将2的n次方保存    {        b[i+1]=b[i]*2;    }    while(scanf("%lld",&q)!=EOF)    {        k=0;        while(q!=0)//每次都减去比该数小的2的n次方,为0时结束,得到结果        {            for(i=0;i<31;i++)            {                if(q>=b[i]&&q<b[i+1])                {                    q=q-b[i];                    k=k+1;                }            }        }        printf("%lld\n",k);    }    return 0;}

原创粉丝点击