题目描述

小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。

请问,在 1 到 n 中,所有这样的数的和是多少?

输入描述

输入一行包含一个整数 (1≤n≤10^4)。

输出描述

输出一行,包含一个整数,表示满足条件的数的和。

输入输出样例

示例

输入

40

点击并拖拽以移动

输出

574

点击并拖拽以移动

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

思路

这道题与最基础的判断数字中是否含有5,7或者是5,7的倍数类似,直接采取暴力求解的方法即可,因为值判断是否含有某个数字,所以也可以用转换为字符串,利用字符串方法Charat()进行判断

注:使用Charat()方法时,注意判断的是字符,需要使用单引号’’将数字括起来

eg:下面代码块中使用的即是典型例子

if (s.charAt(i) == '0' || s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '9')

点击并拖拽以移动

代码实现

import java.util.Scanner;

public class Lanqiao191 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int sum=0;
for (int i = 1; i <= n; i++) {
if(check(i)){
sum+=i;
}
}
System.out.println(sum);
}
//转换为字符串进行判断的方法
public static boolean check(int n){
String s=n+"";
int x=0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '0' || s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '9') return true;
}
return false;
}
}

点击并拖拽以移动

/*
//利用取余取整的方法
private static boolean cheak(int n) {
while (n != 0) {
int a = n % 10;
if (a == 2 || a == 0 || a == 1 || a == 9) {
return true;
}
n /= 10;
}
return false;
}
}
*/

点击并拖拽以移动