蓝桥杯2019年第十届省赛真题——特别数的和
一、题目内容
题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?
输入
输入一行包含两个整数 n。
对于 20% 的评测用例,1 ≤ n ≤ 10。
对于 50% 的评测用例,1 ≤ n ≤ 100。
对于 80% 的评测用例,1 ≤ n ≤ 1000。
对于 所有 的评测用例,1 ≤ n ≤ 10000。
输出
输出一行,包含一个整数,表示满足条件的数的和
样例输入
40
样例输出
574
二、思路分析
方法一:将输入的数字转为字符串后放入字符串数组中,然后循环遍历是否和"2",“0”,“1”,"9"相同,有则计数++
方法二:利用取余的方法拿到每一个位数上的数,再进行对比,有则计数++(使用while更快,for语句这里有一些冗余)
三、代码实现
public class _2019 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int endNumber = sc.nextInt();
int res = 0;
for (int i = 1; i < endNumber + 1; i++) {
// boolean b = inNumber(i); // 方法一入口
boolean b = inChar(i); // 方法二入口
if (b) {
res += i;
}
}
System.out.println(res);
}
/* 方法一 */
private static boolean inChar(int i) {
String str = String.valueOf(i);
char[] charArray = str.toCharArray();
for (char c : charArray) {
if (c == '2' | c == '0' | c == '1' | c == '9') {
return true;
}
}
return false;
}
/* 方法二 */
private static boolean inNumber ( int i){
int s = String.valueOf(i).length();
for (int j = s; j > 0; j--) {
int i1 = i % 10;
if (i1 == 2 | i1 == 0 | i1 == 1 | i1 == 9) {
return true;
}
i /= 10;
}
return false;
}
}
不足之处,请留言指教