题解 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;
 }