Descripción del problema
Ingrese un número entero positivo n y determine cuántas veces debe aparecer el número 1 de 1 a n. Por ejemplo, para el número 1123, 1 aparece dos veces. Por ejemplo, 15, del 1 al 15, hay un total de 8 1.
Formato de entrada
un entero positivo n
formato de salida
un entero, que representa los datos que aparecen 1.
Entrada
de
muestra 15 Salida de muestra
8
El tamaño de los datos y la concordancia
n no superan los 30000
Solución:
La primera reacción a esta pregunta es convertir primero el número en una cadena y juzgar si cada número en la cadena es la cadena "1". Si es así, agregue uno a temp. el código se muestra a continuación:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
scanner.close();
int temp=0;
for(int i=1;i<=n;i++) {
//从1循环到n
String string=i+"";
for(int j=0;j<string.length();j++) {
//当是两位数及以上时,就要对每位上的数进行判断
char a=string.charAt(j);
boolean status=(a+"").contains("1");
if(status) {
temp++;
}
}
}
System.out.println(temp);
}
}
Resultado de la evaluación:
Aunque el resultado pasó la evaluación, pero siempre sentí que mi método no era muy bueno, así que fui a buscar el camino del tipo grande. Efectivamente, el método del jefe es conciso y claro.
Solución:
El siguiente código es principalmente para juzgar si el número 1 está incluido realizando el resto y las operaciones de redondeo de 10 para cada número.
El código es el siguiente (Dirección: https://blog.csdn.net/a1439775520/article/details/104214711):
import java.util.Scanner;
public class 一的个数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//使用完输入流要及时得关闭,防止占内存
sc.close();
//先把所有得变量都声明了
int count = 0,a,b;
for (int i = 1; i <= n; i++) {
//用一个变量代替,如果更改i就会更改循环
a=i;
//和水仙花数一样得方法,取最后一位,/10删除最后一位
while (a!=0){
b=a%10;
if (b==1) count++;
a/=10;
}
}
System.out.println(count);
}
}
Resultados de evaluación: