特别数的和问题
问题详情
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1到 40
中这样的数包括 1、2、9、10至 32、39和 40,共 28个,他们的和是 574
请问,在 1到 n 中,所有这样的数的和是多少?
输入格式
共一行,包含一个整数 n
输出格式
共一行,包含一个整数,表示满足条件的数的和。
数据范围
1≤n≤10000
输入样例:
40
输出样例:
574
问题分析
1、首先对 1~ n 当中的数进行遍历选取 i 进行分析
2、对数字 i 的每一位进行取值 i % 10 ;
3、更新 i 操作 i/=10;
要注意的地方
上述的这些操作不能直接对 i 进行操作,需要一个备份 back ;
对back进行操作,由于太过简单,所以直接放出代码
代码
#include<algorithm>
#include<iostream>
using namespace std;
const int N =1e4+7;
int n;
int main(){
cin>>n;
int ans=0;
for(int i=1;i<=n;i++){
int back=i;
while(back){
int a=back%10;
if(a== 0 || a==1 || a==2 || a==9){
ans+=i;
break;
}
back/=10;
}
}
cout<<ans;
}