题目描述
小明对数位中含有 22、00、11、99 的数字很感兴趣(不包括前导 00),在 11 到 4040 中这样的数包括 11、22、99、1010 至 3232、3939 和 4040,共 2828 个,他们的和是 574574。
请问,在 11 到 nn 中,所有这样的数的和是多少?
输入格式
输入一行包含一个整数 nn。
输出格式
输出一行,包含一个整数,表示满足条件的数的和。
输入输出样例
输入 #1复制
40
输出 #1复制
574
说明/提示
对于 20%20% 的评测用例,1≤n≤101≤n≤10。
对于 50%50% 的评测用例,1≤n≤1001≤n≤100。
对于 80%80% 的评测用例,1≤n≤10001≤n≤1000。
对于所有评测用例,1≤n≤100001≤n≤10000。
蓝桥杯 2019 省赛 B 组 F 题。
代码实现
自己糊涂代码
import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int num = 0;
for (int i = 1; i <= x; i++) {
if (x<=10) {
if (i % 10 == 1 ||i % 10 == 2 ||i % 10 == 9 ||i%10==0) {
num += i;
}
} else if (x<=100) {
if ((i<=10&&(i%10==0||i % 10 == 1 ||i % 10 == 2 ||i % 10 == 9 ))||((i/10%10==0||i/10%10==1||i/10%10==2||i/10%10==9||i%10==0||i % 10 == 1 ||i % 10 == 2 ||i % 10 == 9 )&&i>10)) {
num += i;
}
} else if (x<=1000) {
if (((i<=10&&(i%10==0||i % 10 == 1 ||i % 10 == 2 ||i % 10 == 9 ))||((i/10%10==0||i/10%10==1||i/10%10==2||i/10%10==9||i%10==0||i % 10 == 1 ||i % 10 == 2 ||i % 10 == 9 )&&i>10))||((i % 10 == 1 || i / 10 % 10 == 1 || i / 100 % 10 == 1 ||i%10==0|| i / 10 % 10 == 0 || i / 100 % 10 == 0 || i % 10 == 2 || i / 10 % 10 == 2 || i / 100 % 10 == 2 || i % 10 == 9 || i / 10 % 10 == 9 || i / 100 % 10 == 9 )&&i>100)) {
num += i;
}
} else if(x<=10000){
if (i%10==0||i % 10 == 1 || i / 10 % 10 == 1 || i / 100 % 10 == 1 || i / 1000 % 10 == 1 || i / 10 % 10 == 0 || i / 100 % 10 == 0 || i / 1000 % 10 == 0 || i % 10 == 2 || i / 10 % 10 == 2 || i / 100 % 10 == 2 || i / 1000 % 10 == 2 || i % 10 == 9 || i / 10 % 10 == 9 || i / 100 % 10 == 9 || i / 1000 % 10 == 9) {
num += i;
}
}
}
System.out.println(num);
}
}
不糊涂代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
long sum = 0;
for (int i = 1; i <= n; i++) {
int tempI = i;
while (tempI != 0) {
int temp = tempI % 10;
if (temp == 1 || temp == 2 || temp == 9 || temp == 0) {
sum += i;
break;
}
tempI /= 10;
}
}
System.out.println(sum);
}
}
原因分析
错误分析:判断各十百千位时不能同时判断,举例:i=10时,i/1000%==0。所以必须依次判断,不能一起判断。
核心:依次判断
while (tempI != 0) {
int temp = tempI % 10;
if (temp == 1 || temp == 2 || temp == 9 || temp == 0) {
sum += i;
break;
}
tempI /= 10;
}
标签:10,P8680,java,Scanner,temp,int,蓝桥,100,public
From: https://blog.csdn.net/2302_81099651/article/details/143723855