这道题其实了解了逻辑后十分简单。
题目:
输入一个正整数n,求n转换为二进制后中1的个数。
输入格式:
一个正整数n。
输出格式:
二进制中1的个数
限制:
1<=n<=2147483647
样例 1 :
输入: 8
输出: 1
说明: 二进制为1000,故只有一个1
样例 2 :
输入: 12
输出: 2
说明: 二进制为1100,有2个1 代码:
易错误点(亲身踩坑):
这道题可以用while()循环做,基本不会出错。
但如果你跟我一样,用了string(具体写法详见代码),那你可能会错的很惨:
if()判断里==后面一定要打单引号,不然……
在这里提醒一下我自己:记得输出!
代码:
第一种做法:
#include<bits/stdc++.h>
using namespace std;
const string jinzhi="0123456789";
int cnt=0;
void t(int n)
{
if(n/2==0)
{
if(jinzhi[n]=='1'){
cnt++;
}
return;
}
t(n/2);
if(jinzhi[n%2]=='1'){
cnt++;
}
}
int main()
{
int n;
cin>>n;
t(n);
cout<<cnt;
return 0;
}
第二种写法:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int cnt=0;
while(n)
{
if(n%2==1)
{
cnt++;
}
n/=2;
}
cout<<cnt<<endl;
return 0;
}