题解:P10999 [蓝桥杯 2024 省 Python B] 穿越时空之门

· · 题解

题目大意

要计算 1 到 2024 中有多少个数,它的二进制各数位之和跟他的四进制各数位之和相等。

题目思路

准备

先统计二进制各数位之和:

while(k){
    sum1+=k%2;
    k/=2;
}

再统计四进制各数位之和:

while(k){
    sum2+=k%4;
    k/=4;
}

最后再判断,如果相等计数器加一。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int cnt=0;//计数器
    for(int i=1;i<=2024;i++){
        int k=i,sum1=0,sum2=0;//这里不能改变i值,需要另一个变量
        while(k){//二进制
            sum1+=k%2;
            k/=2;
        }
        k=i;
        while(k){//四进制
            sum2+=k%4;
            k/=4;
        }
        if(sum1==sum2) cnt++;//判断
    }
    cout << cnt;
    return 0;
}