题目描述
给定一个范围[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的题目的时候,注意数据范围。
- 数据范围在~的时候,数据类型用long long。