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

Имеется натуральное число n. Например, оно вводится с клавиатуры вот так:

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();

Как я могу получить сумму цифр этого числа?

int sumDigits = ???
System.out.println(sumDigits);

diralik's user avatar

diralik

9,2956 золотых знаков23 серебряных знака57 бронзовых знаков

задан 30 сен 2011 в 8:28

turtles's user avatar

1

вроде как, должно быть так:

while(n != 0){
       //Суммирование цифр числа
        sum += (n % 10);
        n/=10;
}
System.out.println(sum + " ");

Дух сообщества's user avatar

ответ дан 30 сен 2011 в 8:31

Sergii Kozlov's user avatar

Sergii KozlovSergii Kozlov

2,46815 серебряных знаков13 бронзовых знаков

1

через for тоже можно, они взаимозаменяемы с while:

for(n = sr.nextInt(); n != 0; n /= 10)
{ 
    sum += (n % 10); 
} 
System.out.println(sum + " ");

Дух сообщества's user avatar

ответ дан 30 сен 2011 в 9:22

Valeriy Karchov's user avatar

5

У вас цикл не выполняется ни разу, т.к. n изначально не равно 0.
Поставьте знак != и все должно заработать. И в цикле добавить строчку n /= 10.

ответ дан 30 сен 2011 в 8:32

Gemin's user avatar

GeminGemin

212 бронзовых знака

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

  final Scanner s = new Scanner ( System.in );
  final String line = s.nextLine ().trim ();
  final char [] array = line.toCharArray ();

  int sum = 0;
  for ( final char c : array )
  {
     if ( !Character.isDigit ( c ) )
     {
        throw new IllegalArgumentException ();
     }

     sum = sum + Character.getNumericValue ( c );
  }

  System.out.println ( "sum = " + sum );

ответ дан 30 сен 2011 в 21:38

jmu's user avatar

jmujmu

6,25216 серебряных знаков21 бронзовый знак

3

Для читаемости или
чтобы поддерживать числа со многими цифрами, можно Java Stream API использовать. Суммируем значения символов во вводе как десятичных цифр:

int sum = input.chars().map(c -> Character.digit(c, 10)).sum();

где input это строка из ввода:

String input = scanner.next();

или ввод с консоли:

String input = System.console().readLine();

Если ввод дан как int, то простейший цикл работает:

for ( ; n > 0; n /= 10)
    sum += n % 10;

ответ дан 19 ноя 2017 в 8:53

jfs's user avatar

jfsjfs

51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков

int digitSum(int number) {
    return (number == 0)
        ? 0
        : (number % 10) + digitSum(number / 10);
}

ответ дан 25 окт 2019 в 8:33

isnullxbh's user avatar

isnullxbhisnullxbh

5,1282 золотых знака15 серебряных знаков38 бронзовых знаков

package com.company;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    int sum = 0;
    sum(n, sum);
}
public static void sum(int n, int sum){
    if(n!=0){
       sum+=n%10;
       sum(n/10, sum);
    }
    else System.out.println(sum);
}

}

ответ дан 19 авг 2017 в 9:31

Saydus's user avatar

1

package com.company;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int s = 0;
        for(int n = Math.abs((new Scanner(System.in)).nextInt()); n > 0; s += n % 10, n /= 10);
        System.out.println(s);
    }
}

ответ дан 10 мар 2021 в 8:18

CTAJIUH's user avatar

1

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println((num % 10) + (num / 10) % 10 + (num / 100));
    }
}

ответ дан 23 фев 2020 в 18:05

user373615's user avatar

1

It might be too late, but I see that many solutions posted here use O(n^2) time complexity, this is okay for small inputs, but as you go ahead with large inputs, you might want to reduce time complexity. Here is something which I worked on to do the same in linear time complexity.

NOTE : The second solution posted by Arunkumar is constant time complexity.

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

Please ignore my variable naming convention, I know it is not ideal. Let me explain the code with sample input , e.g. «12345». Output must be 6, in a single traversal.

Basically what I am doing is that I go from LSB to MSB , and add digits of the sum found, in every iteration.

The values look like this

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

Answer is 6, and we avoided one extra loop.
I hope it helps.

Ответы

Аватар пользователя Сергей Якимович

Сумму цифр числа можно найти, суммируя остаток от деления на 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;
    }
}



0



0

Добавьте ваш ответ

Рекомендуемые курсы

35 часов

Старт в любое время

11 часов

Старт в любое время

Типы данных и основные конструкции языка Java: методы, условия, циклы; создание несложных программ

37 часов

Старт в любое время

Похожие вопросы

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

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

Java
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));
            
        }
    }
}
Последнее обновление 26 марта 2019 11:40:04 (UTC / GMT +8 часов)

script1adsense2code

script1adsense3code

Java Basic: упражнение 33 с решением

Напишите программу на Java и вычислите сумму цифр целого числа.

Тестовые данные:
Введите целое число: 25

Иллюстрированная презентация:

Пример решения:

Java-код:

import java.util.Scanner;
public class Exercise33 { 
 public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Input an integer: ");
        long n = input.nextLong();
        System.out.println("The sum of the digits is: " + sumDigits(n));
    }
    public static int sumDigits(long n) {
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }
}

Пример вывода:

 Введите целое число: 25                                                                                           
Сумма цифр: 7 

Блоксхема:

«Блок-схема:

Редактор кода Java:

Внесите свой код и комментарии через Disqus.

Previous: написать программу на Java для сравнения двух чисел
Далее: Напишите программу на Java для вычисления площади шестиугольника.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense5code

disqus2code

script1adsense6code

script1adsense7code

script1adsense8code

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Найди мне как делать слайм
  • Запуск в доверенном режиме кс го как исправить ошибку
  • Как исправить пережаренное мясо свинины
  • Как найти только видео в твиттере
  • Как найти шифровку гласа

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии