问题描述:
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 2019 中,所有这样的数的和是多少?
思路分析:
使用循环遍历1到2019之间的每个数,然后判断每个数的数位中是否包含2、0、1、9这些数字。若包含,则将该数字加入总和中。
有两种实现方法:
- 数位分解
- 字符串转换
算法步骤:
- 初始化总和sum为0。
- 使用一个循环,从1到2019遍历每个数字num。
- 在循环中,判断num的数位中是否包含2、0、1、9这些数字。
- 数位分解: 通过除法与取模运算获取各个数位上值,然后进行判断。
- 字符串转换: 将num转换为字符串,然后使用字符串的contains方法判断是否包含2、0、1、9这些字符。
- 如果包含,将num累加到总和sum中。
- 循环结束后,输出总和sum。
代码实现:
数位分解:
java
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 2019; i++) {
if (containsDigits(i)) {
sum += i;
}
}
System.out.println("在 1 到 2019 中所有这样的数的和是:" + sum);
}
public static boolean containsDigits(int num) {
while (num > 0) {
int digit = num % 10;
if (digit == 2 || digit == 0 || digit == 1 || digit == 9) {
return true;
}
num /= 10;
}
return false;
}
}
字符串转换:
java
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 2019; i++) {
if (containsDigits(i)) {
sum += i;
}
}
System.out.println("在 1 到 2019 中所有这样的数的和是:" + sum);
}
public static boolean containsDigits(int num) {
String numStr = String.valueOf(num);
return numStr.contains("2") || numStr.contains("0") || numStr.contains("1") || numStr.contains("9");
}
}