小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到?n?中,所有这样的数的和是多少?
输入格式:
输入一行包含两个整数 n(1≤n≤104)。
输出一行,包含一个整数,表示满足条件的数的和。
输入
40
输出
574
总通过次数: 19015??|??总提交次数: 19790??|??通过率: 96.1%
难度: 简单???标签: 2019, 暴力, 枚举, 省赛
#include <iostream>
using namespace std;
int tmp(int a)
{
int k=0,s=0;
for(int j=a;j!=0;j=j/10)
{
k=j%10;
if(k==2||k==0||k==1||k==9)
{
s++;
}
}
return s;
}
int main()
{
// 请在此输入您的代码
int n;
cin>>n;
int sum=0,k=0;
for(int i=1;i<=n;i++)
{
if(tmp(i)!=0)
{
sum=sum+i;
}
}
cout<<sum;
return 0;
}
?在编写这个代码过程中,我们应该注意的是,如何将一个数字的个、十、百、千等等拆分出来,进行判断,并且在判断的过程中如果一个数字的不同位置出现了2个或2个以上的题目要求的数字,怎么办,避免重复相加。
函数 tmp(int a):
int tmp(int a)
{
int k=0,s=0;
for(int j=a;j!=0;j=j/10)
{
k=j%10;
if(k==2||k==0||k==1||k==9)
{
s++;
}
}
return s;
}
这个函数用于计算整数 a 中包含多少个数字 0、1、2 或 9。该函数包含以下部分:
主程序 main():
int main()
{
int n;
cin>>n;
int sum=0,k=0;
for(int i=1;i<=n;i++)
{
if(tmp(i)!=0)
{
sum=sum+i;
}
}
cout<<sum;
return 0;
}
这个主程序实现了以下功能: