繁体   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