将一个数字的所有数字相加并分别显示 Java

Sum all digits of a number and show the digits separately in Java

我经常使用这个网站,但我从来没有真正写过任何东西。 今天,我偶然发现了一个我似乎找不到解决方案的问题。

问题是,我有一个 int variable 的位数未知。要求我对所有这些数字求和,然后将其 printed/shown_as_a_message 与所有这些数字分开。

例如,用户输入数字“12345678”,最后我需要一条消息说"The numbers 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36"。我知道如何将所有这些数字分开和求和,但我不知道如何保存每个数字然后显示它,因为我不仅不知道正确的数字数量,而且我不知道它们的值要么。

通常这并不难,但对我来说棘手的部分来了,因为我们还没有学习 arraysstrings、索引等东西,我们不允许使用它们。所以,我应该尽可能使用最简单的代码类型。

到目前为止,我得到了以下信息:

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.");
    }
}

也许是这样的,你没有使用任何类型的容器。每次找到新数字时,只需连接到字符串即可。

    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);

您想在循环时打印出这些数字。例如:

while (number > 0){
     System.out.print( (number % 10) + " + " );
     result = result + (number % 10);
     number = number / 10;
}

您仍然需要正确设置输出格式。

一年前我有过类似的任务。基本上我所做的是使用 String.valueOf(int) 将输入的整数转换为字符串(Integer.toString(int) 也可以)然后我将该字符串中的每个字符转换回整数并将它们添加到总和中。

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);

你可以递归地做:

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));

递归方法,打印字符串并计算总和(最后一位除外):

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);
}

这可以在不使用数组和字符串的情况下以正确的顺序打印出所有数字。

示例:

Enter number:
12345
The numbers: 1 + 2 + 3 + 4 + 5 = 15
BUILD SUCCESSFUL (total time: 5 seconds)

如果您可以使用正则表达式,并且只想在所有数字之间插入一个由空格包围的加号,您可以使用 replaceAll() 方法:

"12345678".replaceAll("\B", " + ") // returns "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8"

\B 是用于匹配 字符之间的空位置的正则表达式(\b 将是 个断字)。由于输入是由所有数字组成的单个"word",因此值的开头和结尾是分词符,数字之间的位置不是分词符。

replaceAll() 然后用 " + " 替换数字之间的所有空格,你就可以在一个简单的表达式中得到你想要的东西。

(代表OP发表).

由 Luke Melaia 解决!

另一件事可能对人们有帮助 Google-ing 这个:

字符串的最短解 -> "12345678".replaceAll("\B", " + ") ➜ 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 – Andreas

user6904265 的递归解决方案。

感谢大家的大力帮助。非常感激。 <3

在Java8的帮助下,你可以这样操作:

public int sumNumber(int number) {
        return String.valueOf(number).chars().map(Character::getNumericValue).sum();
    }

这可能对某人有帮助。