蓝桥杯练习9

题目:

       小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。

       请问,在 1 到 n 中,所有这样的数的和是多少?

输入:一个整数n(1≤n≤10000)

输出:在 1 到 n 中,计算含有2、0、1、9这几个数字的数字和

#include<bits/stdc++.h>   //万能头文件 
using namespace std;
int main()
{
    int n;   //这个是判断的范围 
	cin>>n;  //输入范围n 
	long long sum=0;  // 满足条件的数的和sum,因为怕和过大所以设置成了long long类型 
    for(int i=1;i<=n;i++)
    {
    	int j=i; // 这里将i的值赋给j,因为要判断含不含特殊数字时肯定要对其进行取余和除法,如果继续用i表示的话,会破坏for循环条件 
		int biaoji=0;  //这里的标记是用来帮助判断是否退出下面的while循环 
    	while(j!=0)
    	{ 
    		if(j%10==0||j%10==1||j%10==2||j%10==9)  //判断j对10取余后是否包含特殊数字 
    		{
    			sum=sum+i; //如果包含,则要求和,注意这里求和时加的是i的值,而不是j的值,因为j的值如果个位数上没有包含特殊值的话会对其进行除法 
    			biaoji=1; //如果这个数上有一位已经满足这个条件,则直接将标记的值改为1,即该数字已经满足条件,无需再进行while循环  
			}
			if(biaoji==0) j=j/10;//如果这个数字目前还未包含特殊数字,则除以10,因为j为int类型,故除以10会自动取整 
			if(biaoji==1) j=0;//如果这个数字已经包含了特殊数字,则直接将j变为0,即不满足while的循环条件 
		}
	}
	cout<<sum;  //输出最后的和 
	return 0;
 } 

易错点;当i有一位数满足0、1、2、9时即可退出循环,而无需继续,避免重复计算累加和

嘻嘻,可以看一下注释,有比较详细的解释

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值