Имеется натуральное число n
. Например, оно вводится с клавиатуры вот так:
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Как я могу получить сумму цифр этого числа?
int sumDigits = ???
System.out.println(sumDigits);
diralik
9,2956 золотых знаков23 серебряных знака57 бронзовых знаков
задан 30 сен 2011 в 8:28
1
вроде как, должно быть так:
while(n != 0){
//Суммирование цифр числа
sum += (n % 10);
n/=10;
}
System.out.println(sum + " ");
ответ дан 30 сен 2011 в 8:31
Sergii KozlovSergii Kozlov
2,46815 серебряных знаков13 бронзовых знаков
1
через for тоже можно, они взаимозаменяемы с while:
for(n = sr.nextInt(); n != 0; n /= 10)
{
sum += (n % 10);
}
System.out.println(sum + " ");
ответ дан 30 сен 2011 в 9:22
5
У вас цикл не выполняется ни разу, т.к. n
изначально не равно 0.
Поставьте знак !=
и все должно заработать. И в цикле добавить строчку n /= 10
.
ответ дан 30 сен 2011 в 8:32
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
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
jfsjfs
51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков
int digitSum(int number) {
return (number == 0)
? 0
: (number % 10) + digitSum(number / 10);
}
ответ дан 25 окт 2019 в 8:33
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
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
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
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 | ||
|
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