如何在java中求和整数的数字?

我很难找到解决这个问题的方法。 我正在尝试用Java开发一个带有数字的程序,例如321,并找到数字之和,在这种情况下3 + 2 + 1 = 6.我需要任何三位数的所有数字将它们加在一起,并使用%余数符号存储该值。 这让我感到困惑,我会感激任何人的想法。

public static void main(String[] args) { int num = 321; int sum = 0; while (num > 0) { sum = sum + num % 10; num = num / 10; } System.out.println(sum); } 

产量

 6 

你可以使用递归来做到这一点

 //Sum of digits till single digit is obtained public int sumOfDigits(int num) { int sum = 0; while (num > 0) { sum = sum + num % 10; num = num / 10; } sum = (sum <10) ? sum : sumOfDigits(sum); return sum; } 

递归总是比循环快!

最短和最好的:

 public static long sumDigits(long i) { return i == 0 ? 0 : i % 10 + sumDigits(i / 10); } 

如果你喜欢恒定时间,试试这个:

 double d = 10984.491; // converting to String because of floating point issue of precision String s = new String(d + "").replaceAll("\\D+",""); int i = Integer.parseInt(s); System.out.println(i % 9 == 0 ? 9 : i % 9); 

逻辑是如果您将任意数字加9,结果添加数字将导致相同的数字。

例如 :6 + 9 = 15然后1 + 5 = 6(再次得到6)。

如果是小数点,请将其删除并添加结果数字。

下面的代码诀窍:

 i % 9 == 0 ? 9 : i % 9 

以下方法将执行以下任务:

 public static int sumOfDigits(int n) { String digits = new Integer(n).toString(); int sum = 0; for (char c: digits.toCharArray()) sum += c - '0'; return sum; } 

你可以像这样使用它:

 System.out.printf("Sum of digits = %d%n", sumOfDigits(321)); 

点击这里查看完整的程序

示例代码:

 public static void main(String args[]) { int number = 333; int sum = 0; int num = number; while (num > 0) { int lastDigit = num % 10; sum += lastDigit; num /= 10; } System.out.println("Sum of digits : "+sum); } 

可能为时已晚,但我发现此处发布的许多解决方案使用O(n ^ 2)时间复杂度,这对于小输入是可以的,但是当您继续使用大输入时,您可能希望减少时间复杂度。 这是我在线性时间复杂度上做同样的事情。

注意:Arunkumar发布的第二个解决方案是时间复杂度不变。

  private int getDigits(int num) { int sum =0; while(num > 0) { //num consists of 2 digits max, hence O(1) operation sum = sum + num % 10; num = num / 10; } return sum; } public int addDigits(int N) { int temp1=0, temp2= 0; while(N > 0) { temp1= N % 10; temp2= temp1 + temp2; temp2= getDigits(temp2); // this is O(1) operation N = N/ 10; } return temp2; } 

请忽略我的变量命名约定,我知道它不理想。 让我用样本输入解释代码,例如“12345”。 在单次遍历中输出必须为6。

基本上我正在做的是我从LSB转到MSB,并在每次迭代中添加找到的总和的数字。

值看起来像这样

最初temp1 = temp2 = 0

 N | temp1 ( N % 10) | temp2 ( temp1 + temp2 ) 12345 | 5 | 5 1234 | 4 | 5 + 4 = 9 ( getDigits(9) = 9) 123 | 3 | 9 + 3 = 12 = 3 (getDigits(12) =3 ) 12 | 2 | 3 + 2 = 5 (getDigits(5) = 5) 1 | 1 | 5 + 1 = 6 (getDigits(6) = 6 ) 

答案是6,我们避免了一个额外的循环。 我希望它有所帮助。

可能会迟到..但这是你如何递归地做到这一点

 public int sumAllDigits(int number) { int sum = number % 10; if(number/10 < 10){ return sum + number/10; }else{ return sum + sumAllDigits(number/10); } 

这应该适用于任意数量的数字,它将返回单个数字的总和

 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("enter a string"); String numbers = input.nextLine(); //String would be 55 int sum = 0; for (char c : numbers.toCharArray()) { sum += c - '0'; } System.out.println(sum); //the answer is 10 } 

难道你不应该递归这样做吗? 我对编程很陌生,但我追查到了这一点,我觉得它很有用。

 int sum(int n){ return n%10 + sum(n/10); } 

使用流的简单解决方案:

 int n = 321; int sum = String.valueOf(n) .chars() .map(Character::getNumericValue) .sum(); 

在Java 8中,这可以在一行代码中实现:

 int sum = Pattern.compile("") .splitAsStream(factorialNumber.toString()) .mapToInt(Integer::valueOf) .sum(); 

在Java 8中,

 public int sum(int number) { return (number + "").chars() .map(digit -> digit % 48) .sum(); } 

将数字转换为字符串,然后通过减去ascii值’0’(48)将每个字符映射到它的数字值并添加到最终总和。

这是一个简单的程序,用于数字321的数字之和。

  import java.math.*; class SumOfDigits { public static void main(String args[]) throws Exception { int sum = 0; int i = 321; sum = (i % 10) + (i / 10); if (sum > 9) { int n = (sum % 10) + (sum / 10); System.out.print("Sum of digits of " + i + " is " + n); }else{ System.out.print("Sum of digits of " + i + " is " + sum ); } } } Output: Sum of digits of 321 is 6 

或者简单一点,您可以使用此程序。

 public class SumOfDigits { public static void main(String[] args) { long num = 321; /* int rem,sum=0; while(num!=0) { rem = num%10; sum = sum+rem; num=num/10; } System.out.println(sum); */ if(num!=0) { long sum = ((num%9==0) ? 9 : num%9); System.out.println(sum); } } 

如果你是一个像我这样的新程序员,我希望你能理解这一点,这比其他人更简单。

 import java.util.Scanner; import java.lang.Math; public class DigitsSum { public static void main(String[] args) { Scanner in = new Scanner(System.in); int digit = 0; System.out.print("Please enter a positive integer: "); digit = in.nextInt(); int D1 = 0; int D2 = 0; int D3 = 0; int G2 = 0; D1 = digit / 100; D2 = digit % 100; G2 = D2 / 10; D3 = digit % 10; System.out.println(D3 + G2 + D1); } } 

除了这里的答案,我可以解释一下。 这实际上是一个数学问题。

321是总共300 + 20 + 1。

如果将300除以100,则得到3。

如果你将20除以10,你得到2。

如果将1除以1,则得1。

在这些操作结束时,您可以总结所有这些操作,并获得6。

 public class SumOfDigits{ public static void main(String[] args) { int myVariable = 542; int checker = 1; int result = 0; int updater = 0; //This while finds the size of the myVariable while (myVariable % checker != myVariable) { checker = checker * 10; } //This for statement calculates, what you want. for (int i = checker / 10; i > 0; i = i / 10) { updater = myVariable / i; result += updater; myVariable = myVariable - (updater * i); } System.out.println("The result is " + result); } }