蓝桥杯C/C++程序设计——特别数的和
2023-12-31 18:42:56
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到?n?中,所有这样的数的和是多少?
输入描述
输入格式:
输入一行包含两个整数 n(1≤n≤104)。
输出描述
输出一行,包含一个整数,表示满足条件的数的和。
输入输出样例
示例
输入
40
输出
574
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
总通过次数: 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。该函数包含以下部分:
- 变量初始化:初始化变量 k 和 s,分别用于存储每个数字和计数。
- 循环:从个位开始循环拆分数字,循环条件是 j 不等于 0,每次循环结束更新 j 的值为 j/10。
- 数字判断:通过取余运算获取每次循环中的个位数字 k,然后判断 k 是否为 0、1、2 或 9,如果满足条件则计数器 s 自增。
- 返回结果:返回计数器 s 的值作为函数的返回值。
-
主程序 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; }
这个主程序实现了以下功能:
- 输入:从标准输入流中获取一个整数 n,用于确定循环范围。
- 变量初始化:初始化变量 sum 和 k 为 0,分别用于存储满足条件的数字之和和临时变量。
- 循环:从 1 开始循环到 n,循环条件是 i 小于等于 n,每次循环结束更新 i 的值加一。
- 条件判断:对每个数 i 调用 tmp() 函数,判断返回值是否不等于 0,如果满足条件则将当前数 i 累加到 sum 中。
- 输出:将 sum 输出到标准输出流中。
- 返回结果:返回 0,表示程序正常结束。
文章来源:https://blog.csdn.net/weixin_66547608/article/details/135318177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!