题目来源:牛客
BC153 [NOIP2010]数字统计
题目描述:
请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。
比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。
输入描述:
输入共1行,为两个正整数L和R,之间用一个空格隔开。
输出描述:
输出共1行,表示数字2出现的次数。
示例1
输入:2 22
输出:6
示例2
输入:2 100
输出:20
备注:
1 ≤ L ≤ R ≤ 10000。
解析
本题比较简单,由于数据量比较小,很容易想到枚举。枚举 L ≤ R 这个区间里的所有数字,判断每个数字里面含有的 2 的个数就可以轻松解决。
获取一个数字的所有位数有一个非常经典的方法,将这个数不断地模10和除10。模10获得最右的一位,除10可以去除最右的一位。
代码实现
#include <iostream> using namespace std; int main() { int L = 0; int R = 0; cin >> L >> R; int ans = 0; for (int i = L; i <= R; ++i) { // 不能直接修改i,因为i涉及循环 int tmp = i; while (tmp) { // 找到某一位符合要求 if (tmp % 10 == 2) // 答案数 +1 ++ans; tmp /= 10; } } cout << ans; return 0; }