题解 CF784B 【Kids' Riddle】
把一个数转换为其他进制可以使用“短除法”,我的方法就是基于这个的。又因为这道题并不要求输出十六进制下的数,所以并不用存下来,只需要数就行了。
特判:当n=0,并不是一位都没有而是有一位“0”,所有需要特判输出0
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n,c=0,x;
cin>>n;//要判断的数
if(!n)//特判
{
cout<<"1\n";
return 0;
}
while(n)
{
x=n%16;//除下的余数
n/=16;//除以十六
if(x==0||x==4||x==6||x==9||x==10||x==13)c++;
else if(x==8||x==11)c+=2;
}
cout<<c<<endl;
return 0;
}