题解 CF656D 【Rosetta Problem】

2018-03-31 17:18:57


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

难度应该不亚于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;
}