length - java long digits
Sume todos los dígitos de un número y muestre los dígitos por separado en Java (7)
He estado usando este sitio bastante pero nunca escribí nada. Hoy, me he topado con un problema que solución parece no poder encontrar.
El problema es que tengo una int variable
con un número desconocido de dígitos. Se me pidió que sumara todos esos dígitos y luego lo imprimiera / mostrara_como_un_mensaje con todos esos dígitos separados.
Por ejemplo, el usuario ingresa el número "12345678" y al final necesito un mensaje que diga "Los números 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36". Sé cómo separar y sumar todos esos números, pero no sé cómo guardar cada número y luego mostrarlo, porque no solo no sé la cantidad correcta de dígitos, sino que no conozco sus valores. ya sea.
Por lo general, eso no sería difícil de hacer, pero aquí viene la parte difícil para mí, ya que no hemos aprendido cosas como arrays
, strings
, índices, etc., no podemos usarlas. Entonces, se supone que debo hacerlo con el tipo de código más simple posible.
Hasta ahora, tengo lo siguiente:
import java.util.Scanner;
public class Numbers {
public static void main(String[] args) {
int number, result;
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
result = 0;
while (number > 0){
result = result + (number % 10);
number = number / 10;
}
System.out.println("This is where the message would go.");
}
}
Desea imprimir estos números mientras está bucleando. Ex:
while (number > 0){
System.out.print( (number % 10) + " + " );
result = result + (number % 10);
number = number / 10;
}
Aún tiene la tarea de obtener su salida formateada correctamente.
Si está bien usar expresiones regulares, y simplemente quiere insertar un signo más rodeado de espacios entre todos los dígitos, puede usar el método replaceAll()
:
"12345678".replaceAll("//B", " + ") // returns "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8"
//B
es la expresión regular para hacer coincidir las posiciones vacías entre caracteres que no son separadores de palabras ( //b
serían posiciones que son saltos de palabra). Dado que la entrada es una sola "palabra" que consta de todos los dígitos, el comienzo y el final del valor son saltos de palabra, y las posiciones entre los dígitos no son saltos de palabra.
replaceAll()
luego reemplaza todos esos espacios vacíos entre los dígitos con " + "
, y obtienes exactamente lo que querías en una expresión simple.
Tal vez algo así como que no estés usando ningún tipo de contenedor. Simplemente concatenar a la cadena cada vez que encuentre un nuevo número.
int number, result;
String finalOutput = "";
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
result = 0;
while (number > 0){
result = result + (number % 10);
finalOutput += (number % 10);
number = number / 10;
if(number > 0)
{
finalOutput += " + ";
}else{
finalOutput += " = ";
}
}
System.out.println("The numbers " + finalOutput + result);
Tuve una tarea similar hace un año. Básicamente, lo que hice fue convertir el entero String.valueOf(int)
en una String usando String.valueOf(int)
( Integer.toString(int)
también funciona) luego cambio cada char de esa cadena a enteros y los agrego a la suma.
Scanner sc = new Scanner(System.in);
int sum= 0;
System.out.println("Number?");
int num = sc.nextInt();
sc.close();
String countNum = String.valueOf(num);
for(int i = 0; i < countNum.length(); i++) {
int j = Character.digit(countNum.charAt(i), 10);
sum += j;
}
System.out.println("The sum is: " + sum);
(Publicado en nombre del OP) .
¡Resuelto por Luke Melaia!
Otra cosa que podría ser útil para las personas que buscan esto en Google:
La solución más corta con String -> "12345678" .replaceAll ("/ B", "+") ➜ 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 - Andreas
Solución recursiva por user6904265 .
Gracias a todos por la gran ayuda. Muy apreciado. <3
Puedes hacerlo recursivamente:
int number,result;
Scanner sc = new Scanner(System.in);
System.out.println("Enter number:");
number = sc.nextInt();
//sum to the result and print last digit and the result
int last = number%10;
result = reverse(number/10);
System.out.print(last + " = "+ (result + last));
Método recursivo, imprima la cadena y calcule la suma (excepto el último dígito):
private static int reverse(int number) {
if(number>0){
int p = number % 10 + reverse(number/10);
System.out.print(number % 10 + " + ");
return p;
}
return 0;
}
static final Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int number, result;
System.out.println("Enter number:");
number = input.nextInt();
result = 0;
System.out.print("The numbers: ");
//Reverses the number
int reversedNum = 0;
while (number != 0) {
reversedNum = reversedNum * 10 + number % 10;
number = number / 10;
}
//Iterates over the number and prints it out
while (reversedNum > 0) {
System.out.print((reversedNum % 10));
result = result + (reversedNum % 10);
reversedNum = reversedNum / 10;
if (reversedNum > 0) {
System.out.print(" + ");
}
}
System.out.println(" = " + result);
}
Esto funciona para imprimir todos los números en el orden correcto sin usar matrices y cadenas.
Ejemplo:
Enter number:
12345
The numbers: 1 + 2 + 3 + 4 + 5 = 15
BUILD SUCCESSFUL (total time: 5 seconds)