题目
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?
输入格式
共一行,包含一个整数 n。
输出格式
共一行,包含一个整数,表示满足条件的数的和。
数据范围
1≤n≤10000
输入样例:
40
输出样例:
574
以下代码实现了这一功能,请你填补空白处的内容:
#include <iostream> using namespace std; int ans, n; bool check(int n) { while (n) { int tmpn = n % 10; if (tmpn == 2 || tmpn == 0 || tmpn == 1 || tmpn == 9) return true; __________________; } return false; } int main() { cin >> n; for (int i = 1; i <= n; i++) { if (check(i)) ans += i; } cout << ans << endl; return 0; } 提示: 只要利用模除找出含有2,0,1,9的数即可
分析
在 check
函数中,我们需要检查数字 n
的每一位是否包含 2、0、1 或 9。如果包含这些数字中的任何一个,我们就返回 true
;否则,我们继续检查 n
的下一位数字。当 n
变为 0 时,说明我们已经检查了它的所有位,且没有找到任何 2、0、1 或 9,因此返回 false
。
在 while
循环中,每次迭代我们都会通过 n % 10
获取 n
的最后一位数字,并检查它是否是我们感兴趣的数字。如果是,我们返回 true
。如果不是,我们通过 n /= 10
去掉 n
的最后一位数字,继续检查下一位。
所以,空白处应该填写的是
n /= 10;
,以去掉n
的最后一位数字,继续检查下一位。