Сумма всех чисел числа java

Как сложить цифры целого числа в Java?

Мне сложно определить решение этой проблемы. Я пытаюсь разработать программу на Java, которая принимает число, например 321, и находит сумму цифр, в этом случае 3 + 2 + 1 = 6. Мне нужны все цифры любого трехзначного числа, чтобы добавить их вместе, и сохраните это значение, используя символ% остатка. Это меня сбивало с толку, и я был бы признателен за любые идеи.

Вы пытаетесь вычислить цифровой корень любого трехзначного числа? Если да, то какая часть доставляет вам неприятности?

Ну, я просто пытаюсь взять любое число, например 480, и сделать его равным всем его цифрам (4, 8, 1), чтобы сложить их, используя символ%. Мне нужно создать цикл в Java, который может сделать это.

Кажется, что у вас уже есть число в виде целого числа — я предположил, что ваш ввод был строкой — (иначе я не совсем понимаю, какая часть этой по существу математической проблемы вызывает у вас проблемы)

17 ответов

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

Это работает. Ожидаемый класс @ShaneLarsen, интерфейс или перечисление обычно означает отсутствие фигурной скобки.

Рекурсии всегда быстрее, чем циклы!

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

Вы можете сделать это, используя Recursion

//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

Если вы любите постоянное время, попробуйте это:

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

В случае десятичной точки удалите его и добавьте итоговые цифры.

Это не ответ на вопрос, потому что это решение суммирует рекурсивно, например: 456 -> 4+5+6 = 15 -> 1+5 = 6 , а не 456 -> 4+5+6 = 15 Но оно подходит мой случай, так что +1 🙂

Суммирует все цифры независимо от размера номера.

private static int sumOfAll(int num) < int sum = 0; if(num >10) < sum += num % 10; while((num = num / 10) >= 1) < sum += (num >10) ? num%10 : num; > > return sum; > 
public int sum(int number) < return (number + "").chars() .map(digit ->digit % 48) .sum(); > 

Преобразует число в строку, а затем каждый символ сопоставляется с его цифровым значением, вычитая значение ascii ‘0’ (48) и добавляя к окончательной сумме.

Простое решение с использованием потоков:

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

В дополнение к ответам здесь я могу немного объяснить. Это на самом деле математическая проблема.

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

Разве вы не можете сделать это рекурсивно что-то вроде этого? Я немного новичок в программировании, но я проследил это, и я думаю, что это работает.

Я бы добавил где-нибудь проверку if, потому что в настоящее время sum будет бесконечно вызывать себя, вызывая ошибку хоста этого сайта;) ( StackOverflowError ). Что-то вроде int sum(int n) < if(n >9) < return n%10 + sum(n/10); >return n;>

Это должно работать нормально для любого количества цифр, и оно будет возвращать отдельную цифру суммы

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 > 

Может быть немного поздно.. но вот как вы можете это сделать рекурсивно

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

Возможно, слишком поздно, но я вижу, что многие решения, размещенные здесь, используют сложность времени 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, и мы избегали одного дополнительного цикла. Надеюсь, это поможет.

Источник

Подсчитать сумму цифр в целом числе

Рекурсия, подсчитать количество цифр в заданном целом числе
Подсчитать количество цифр в заданном целом числе n

Подсчитать количество цифр в заданном натуральном числе и найдите сумму цифр заданного натурального числа
Подсчитать количество цифр в заданном натуральном числе и найдите сумму цифр заданного натурального.

Подсчитать количество цифр в заданном числе n, сумму цифр числа n, и выяснить, входит ли цифра 3 в его запись
Задано натуральное число n. Составить программу, которая подсчитывает количество цифр в числе n.

1 2 3 4 5 6 7 8 9 10 11 12
public class B{ public static void main (String[] args){ String s="1234"; String[] a = s.split(""); int m=0; for(int i=1;ia.length;i++){ m+=Integer.parseInt(a[i]); } System.out.println(m+""); } }
1 2 3 4 5 6 7 8 9 10 11 12
public class demo { public static void main(String[] args) { int k = 12345; int x =k; int s = 0; while (x != 0 ){ s +=x%10; x /=10; } System.out.println("Сумма цифр в числе " + k + " = " + s); } }

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import java.util.Scanner; class DigitsCounter { private static int digitsCount(int n) { return ( n  0 ) ? digitsCount(-n) : ( n == 0 ) ? 1 : (int)Math.log10(n) + 1; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while ( true ) { System.out.print("Number: "); if ( ! sc.hasNextInt() ) break; int n = sc.nextInt(); System.out.println(digitsCount(n) + " digits"); } } }

Эксперт Java

ЦитатаСообщение от easybudda Посмотреть сообщение

оригинальный способ, я обычно в строку и ее длину 🙂

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

turbanoff, а как Вы себе это число представляете положительным 32-битным целым? Да и выпендрёжные варианты исключительно для выпендрёжа, а не чтобы во всех маргинальных случаях работали.

Эксперт Java

ЦитатаСообщение от easybudda Посмотреть сообщение

А зачем это делать? Вы же считаете только количество цифр, вам не нужно его «представлять» в каком-либо другом виде.

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

turbanoff, то есть нужно было написать комментарий с той частью курса математики, в которой объясняется, почему не бывает числа, в степень которого нужно возвести число 10, чтобы получить отрицательное число, или хотябы ноль. Добавить небольшой трактат на тему машинного представления целых чисел. И всё ради того, чтобы сказать — да, таки эта функция с числом -2147483648 не справится.

Вот вариант с подсчётом суммы цифр в числе, снова выпендрёжный и снова при вводе -2147483648 приводящий к аццкой рекурсии, валящей программу с этим самым Stack. ну Вы в курсе

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import java.util.Scanner; class DigitsSum { private static int digitsSum(int n) { return ( n  0 ) ? digitsSum(-n) : ( n == 0 ) ? 0 : n % 10 + digitsSum(n / 10); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while ( true ) { System.out.print("Number: "); if ( ! sc.hasNextInt() ) break; int n = sc.nextInt(); System.out.println("Sum of digits: " + digitsSum(n)); } } }

Источник

Как найти сумму цифр числа java

Сумму цифр числа можно найти, суммируя остаток от деления на 10 :

public class App  public static void main(String[] args)  System.out.println(sumOfDigits(123)); // => 6 > public static int sumOfDigits(int number)  number = Math.abs(number); int sum = 0; while (number > 0)  sum += number % 10; number /= 10; > return sum; > > 

Источник

Как найти сумму цифр числа java

Сумму цифр числа можно найти, суммируя остаток от деления на 10 :

public class App  public static void main(String[] args)  System.out.println(sumOfDigits(123)); // => 6 > public static int sumOfDigits(int number)  number = Math.abs(number); int sum = 0; while (number > 0)  sum += number % 10; number /= 10; > return sum; > > 

Источник

Читайте также:  Yandex music downloader python
Оцените статью