题目:来源于洛谷
请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。
比如给定范围[2, 22],数字2 在数 2中出现了 1 次,在数12 中出现 1 次,在数 20 中出现 1次,在数 21 中出现 1 次,在数 22 中出现 2次,所以数字2 在该范围内一共出现了 6次。
输入格式
2个正整数 L和 R,之间用一个空格隔开。
输出格式
数字 2出现的次数。
输入输出样例
输入 #1
2 22
输出 #1
6
分析:
运用字符串流读入循环输入的数,但字符串流是不能直接输出,需要用到他的内置函数str(),把字符串流转换为字符串,再利用count函数统计字符串中某个值出现得个数,代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
{
//认真读题,首先我想到的是字符流
int L, R;
cin >> L >> R;
stringstream ss;
for (int i = L; i <= R; ++i) {
ss << i;
}
string s = ss.str();
cout << count(s.begin(), s.end(), 2 + '0') << endl;
return 0;
}
结果发现自己想得太复杂,更简单的思路如下:运用数学的方法
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
//数学的方法
int L, R, ans = 0;
cin >> L >> R;
for (int i = L; i <= R; ++i) {
int x = i;
while (x) {
if (2 == x % 10) {
ans++;
}
x /= 10;
}
}
cout << ans << endl;
return 0;
}
(●ˇ∀ˇ●)