问题:小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少?
特别数的和
问题:小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少?
思路:
- 上一题做的是数的分解,我在里面很困惑啊,想知道是啥的可以点击下方链接去看看。谁知道下一题就是这个,我立马就看出来了这两道题的相似点,然后还顺手把想测试的程序运行时间测了,就很棒。
- 代码1使用indexOf()方法判断,方法二是我想的笨方法判断,我测试后发现我的方法比indexOf要快很多,很开心啊。这道题很简单,代码就不写注释了。
数的分解 点击查看
代码1:
public class 特别数的和 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long start = System.nanoTime();
int sum = 0;
for (int i = 1; i <= n; i++) {
String s = i + "";
if (s.indexOf("2") != -1 || s.indexOf("0") != -1 || s.indexOf("1") != -1 || s.indexOf("9") != -1) {
sum += i;
}
}
long end = System.nanoTime();
long time = end - start;
System.out.println(sum);
System.out.println("所用时间:" + time);
}
}
运行时间:
代码2:
public class 特别数的和1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long start = System.nanoTime();
int sum = 0;
OUT:for (int i = 1; i <= n; i++) {
int a = i;
while (a != 0) {
if (a % 10 == 2 || a % 10 == 0 || a % 10 == 1 || a % 10 == 9) {
sum += i;
continue OUT;
}
a /= 10;
}
}
long end = System.nanoTime();
long time = end - start;
System.out.println(sum);
System.out.println("所用时间:" + time);
}
}
Tisfy: 写得太好了!正如那:何日请缨提锐旅,一鞭直渡清河洛。
ctotalk: 收了
软工2班吴同学: 动态规划 public static void main(String[] args) { // 动态规划 int [] dp = new int[20190325]; dp[0] = 0; dp[1] = 1; dp[2] = 1; dp[3] = 1; for (int i = 4; i <=20190324 ; i++) { dp[i] = (dp[i-1] + dp[i-2] +dp[i-3]) %10000; } System.out.println(dp[20190324]); }
..哲: 死算电脑算了半小时还是没算出来,应该使用简便方法比较好
海梨: Java里整型除10减少一位,因为整型变量接收浮点数只保存整数部分。123 / 10 用int变量接收,变量值为12