题目链接:
http://www.jsuacm.cn/problem.php?cid=1537&pid=8
题面:
思路:
这道题目的基本思路就是把K转换为二进制,因为每条街对应的数目都是二进制中的1,10,100,100.。。。。。。,我们把K转换为二进制,就只需要判断这转换为二进制后,出现了多少次1,就是用二进制表示的最少数目
参考代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
long long k;
while(scanf("%lld",&k)!=EOF)
{
long long c,ans=0;
while(k)
{
c=k%2;//判断二进制的每一位
if(c==1)//如果出现1就加1
{
ans++;
}
k=k/2;//进一位
}
printf("%lld\n",ans);
}
}