笔试强训 | BC153 [NOIP2010]数字统计

文章介绍了如何使用C++编程语言统计给定范围[L,R]内数字中2的出现次数,通过数字拆分(%10和/10)遍历并计数的方法实现。重点提到了易错点和注意事项,如避免将while写成if导致无限循环,以及处理大范围数据时选择longlong数据类型。
摘要由CSDN通过智能技术生成

题目描述

给定一个范围[L,R] 中的数字,统计这些数字中2出现的次数。

其中“22”中有两个“2”。

第一行输入[L,R]的数值,输出在这一段范围中“2”出现的次数。

算法原理

思路

想要知道[L,R]数字范围之间中,出现数字“2”的次数。只需将[L,R]中所有的数字枚举,遍历统计记录每个数字中数字“2”出现的次数。

解法

枚举+数字拆分

数字拆分方法

数字拆分方法:(%10)&&(/10)

1234 % 10 = 4

1234 / 10 = 123

123 % 10 = 3

123 / 10 = 12

编写代码

//范围【a,b】查看中有几个2,(22中有2个2)
//【思路】:遍历+%、/
#include <iostream>
using namespace std;
int main()
{
	int a, b;
	
	while (cin >> a >> b)
	{
		int count=0;
		//遍历【a,b】之间的所有数据
		for (int i = a; i <= b; i++)
		{
			int num = i;
			//逐个数据进行判断
			while (num != 0)
			{
				int tmp = num % 10;
				if (tmp == 2)
				{
					count++;
				}
				num = num / 10;
			}
		}
		cout << count << endl;
	}
	
	return 0;
}

总结反思

  • 易错点:将while与if两个关键字,“脑子不转”,将while写为if,使其持续做的事情只是进行了判断。
  • 拆分数据的方法:1234%10=4,1234/10=123。%10是取出数字的最后一位,/10是将数字删掉最后个位的数字,也就是数字缩小十倍。
  • 1%10=1(0*10+1=1):只有一位的数字%10就是他本身。
  • 1/10=0(0*10+1=1):只有一位的数字/10是0。
注意事项:
  • 在做ACM的题目的时候,注意数据范围。
  • 数据范围在10^{9}~10^{18}的时候,数据类型用long long
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值