B3786 [信息与未来 2023] 幸运数字题解

· · 题解

前置知识

我们需要了解一个知识,对于一个 int 类型的数 123,我们先取它除以 10 的余数,结果是 3,即它的最后一位。我们再将它除以 10 结果为 12(因为 int 类型除法会丢失精度,也就是向下取整),这时我们会发现 12 就是 123 的前两位。按照这个步骤操作我们就可以取出这个数的每一位了。

代码

#include<bits/stdc++.h>
using namespace std;
int a,b,ans=0;
int main(){
    cin>>a>>b;
    for(int i=a;i<=b;i++){//从a到b枚举每一个数 
        int p=i,sum1=0,sum2=0,flag=0;
        while(p>0){
            if(flag==0){//取出这个数的奇数位 ,用flag实现奇偶位的交替 
                sum1+=p%10; 
                flag=1;
            }else{//取出这个数的偶数位 
                sum2+=p%10;
                flag=0;
            }
            p/=10;
        }
        if(sum1==sum2)
        ans++;
    }
    cout<<ans;
}