题解 CF656D 【Rosetta Problem】

· · 题解

感觉这个题的难度在开玩笑

难度应该不亚于000001这个愚人节题(明天就是愚人节了)

这是一个数学题,要求一个数a(\leq1,000,000)转化为其8进制数,问其中的1有多少

正如转为二进制一样,转为八进制可以用短除法,我们来看样例的129短除8的结果

1\backslash\underline{129} 0\backslash\underline{16} 2\backslash\underline{2}

所以129的八进制数是201

所以在做第一次循环时,a mod 8的结果就是第一位的数,只需要判断这个数是不是1即可。

Code:

#include<cstdio>
int main()
{
    int a,sum=0;
    scanf("%d",&a);
    while(a)
    {
        if(a%8==1)
            sum++;
        a/=8;
    }
    printf("%d\n",sum);
    return 0;
}