簡體   English   中英

總結一個數字的所有數字並在Java中分別顯示數字

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

我一直在使用這個網站很多,但我從來沒有真正寫過任何東西。 今天,我偶然發現了一個我似乎找不到解決方案的問題。

問題是,我有一個未知位數的int variable 它要求我將所有這些數字相加,然后將其打印/顯示_as_a_message,並將所有這些數字分開。

例如,用戶輸入數字“12345678”,最后我需要一條消息說“數字 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 。將字符位置)。 由於輸入是由所有數字組成的單個“單詞”,因此值的開頭和結尾是分詞符,數字之間的位置不是分詞符。

replaceAll()然后用" + "替換數字之間的所有空格,你就可以在一個簡單的表達式中得到你想要的。

(代表 OP 發布)

由盧克·梅萊亞解決!

另一件可能對谷歌搜索的人有幫助的事情:

字符串的最短解決方案 -> "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();
    }

這可能對某人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM