一、题目链接
http://noi.openjudge.cn/ch0105/41/
二、解题思路
◎ 根据题意,通过余10法和除10法,依次检测当前整数i的各数位,如果是2则令结果ans++;
◎ 定义并输入两个int类型的整数L、R,分别代表区间[L,R]的下界和上界;
◎ 定义两个int类型的整数t、ans,其中t用于暂存当前数i,ans代表[L,R]区间内所有整数包含数字2的个数,初始时ans为0;
◎ 从L开始,到R为止,利用循环i处理如下:
→ 首先,令t = i,也即将当前数i暂存于t中;
→ 其次,在当前数i尚未降阶为0时,循环处理如下:
*** 如果当前数i的个位数为2,也即t % 10 == 2,则令ans++;
*** 利用除10法移除当前数i的个位数,也即令t = t / 10;
循环i结束后,ans中存储了[L,R]区间内所有整数包含数字2的个数;
◎ 输出ans。
三、Java程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int L = scanner.nextInt();
int R = scanner.nextInt();
int ans = 0;
int t;
for (int i = L; i <= R; i++) {
t = i;
while (t != 0) {
if (t % 10 == 2) {
ans++;
}
t = t / 10;
}
}
System.out.print(ans);
}
}
四、C++程序
#include <iostream>
using namespace std;
int main()
{
int L;
int R;
cin >> L;
cin >> R;
int ans = 0;
int t;
for (int i = L; i <= R; i++)
{
t = i;
while (t != 0)
{
if (t % 10 == 2)
{
ans++;
}
t = t / 10;
}
}
cout << ans;
return 0;
}