int n = sl.nextInt(); int count = 0; for (int i = 1; i <= n; i++) { String str = Integer.toString(i); for (int j = 0; j < str.length(); j++) { if (str.charAt(j) == '1') { count++; } } } System.out.println(count); j加个n(1≤n≤10000)
时间: 2024-02-14 15:15:29 浏览: 58
Java Random.nextInt()方法原理解析
是的,您是对的,在内部循环中,j 的终止条件应该是 j <= i 的位数,而不是 j < str.length()。因为 i 的位数最多是 log10(i)+1,因此可以将内部循环的终止条件改为 j <= (int)(Math.log10(i) + 1)。修改后的代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
for (int i = 1; i <= n; i++) {
int digits = (int)(Math.log10(i) + 1);
for (int j = 0; j < digits; j++) {
int digit = i / (int)Math.pow(10, j) % 10;
if (digit == 1) {
count++;
}
}
}
System.out.println(count);
}
}
```
这个程序的思路与之前介绍的数学方法类似,但是使用了字符串转换的方式。同时,对于每个数,可以通过计算它的位数,然后依次计算每一位上的数字,来统计数字 1 出现的次数。
阅读全文