【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少?
这是一道经典的算法入门题
首先我们应该找到题目的限制条件,当有存在数字0,1,2,9是为真,那么我们可以用循环来遍历数字,在分模块来写判断子函数。
1、首先我们先来写判断子函数:
int istrue(int n){
int ans=0;
while(n>0){
ans=n%10;
n/=10;
if(ans==2||ans==0||ans==1||ans==9)return 1;
}
return 0;
}
以此判断数是否符合限制条件。
2、再来写遍历子函数
int que(int n){
int sum=0;
for(int i=1;i<=n;++i)
if(istrue(i))sum+=i;
return sum;
}
3、检验结果
用题目中现成的结论来检验,计算40以内符合小明喜好的数的和为574
int main(){
cout<<que(2019)<<endl;
return 0;
}
结果:
由此得出:2019的结果为