Как сложить два числа в java
Перейти к содержимому

Как сложить два числа в java

  • автор:

Java Как сложить два числа

Узнайте, как сложить два числа с помощью пользовательского ввода:

Пример

import java.util.Scanner; // Import the Scanner class class MyClass < public static void main(String[] args) < int x, y, sum; Scanner myObj = new Scanner(System.in); // Create a Scanner object System.out.println("Type a number:"); x = myObj.nextInt(); // Read user input System.out.println("Type another number:"); y = myObj.nextInt(); // Read user input sum = x + y; // Calculate the sum of x + y System.out.println("Sum is: " + sum); // Print the sum >> 

Как складывать два числа в java

Сложить два числа в Java можно при помощи оператора сложения + :

var a = 10; var b = 7; var sum1 = a + b; // 17 var sum2 = 20 + b; // 27 

Основы Java за 14 дней

62 урока в онлайн-тренажере

4 живых вебинара и масскодинг

Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

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

23 ноября 2021

23 ноября 2021

23 ноября 2021

23 ноября 2021

  • 8 800 100 22 47 бесплатно по РФ
  • +7 495 085 28 38 бесплатно по Москве

Направления

  • Курсы «Backend-разработка»
  • Курсы «Frontend-разработка»
  • Курсы «Создание сайтов»
  • Курсы «Тестирование»
  • Курсы «Аналитика данных»
  • Интенсивные курсы
  • Курсы DevOps
  • Курсы «Веб-разработка»
  • Курсы «Математика для программистов»
  • Все курсы

О Хекслете

  • О нас
  • Карьера в Хекслете
  • Хекслет Колледж

ООО «Хекслет Рус» 108813, г. Москва, вн.тер.г. поселение Московский, г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 10/3 ОГРН 1217300010476

  • Справка
  • Вопросы и ответы
  • Сообщество
  • Дополнительно
  • Условия использования
  • Соглашение об обработке ПД
  • Оферта
  • Акции

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

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

Shane Larsen 24 нояб. 2014, в 03:03
Поделиться

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

Matt Coubrough 24 нояб. 2014, в 01:40

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

Shane Larsen 24 нояб. 2014, в 01:41
нужно закончить этот код: Public static void main (String [] args)
Shane Larsen 24 нояб. 2014, в 01:42
Возможный дубликат Как получить отдельные цифры целого числа?
AdamMc331 24 нояб. 2014, в 01:43
@ShaneLarsen посмотри на ответ
Ankur Singhal 24 нояб. 2014, в 01:43

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

Matt Coubrough 24 нояб. 2014, в 01:50
Показать ещё 4 комментария
Поделиться:

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

Выход

Ankur Singhal 24 нояб. 2014, в 03:38
Поделиться
это не работает в моем компиляторе, как это.
Shane Larsen 24 нояб. 2014, в 01:52
я получаю ошибку перечисления класса
Shane Larsen 24 нояб. 2014, в 01:53
Это не работает, он получает ошибки.
Shane Larsen 24 нояб. 2014, в 01:59

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

Michael Queue 24 нояб. 2014, в 02:02
Это, наверное, ОП просит сделать домашнее задание, и даже не поместил основную функцию в класс.
Martin Konecny 24 нояб. 2014, в 02:08
на самом деле я сделал это в классе.
Shane Larsen 24 нояб. 2014, в 02:21
Показать ещё 4 комментария

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

Самый короткий и лучший:

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

nicoosokhan 18 окт. 2016, в 23:29
Поделиться
Вы действительно уверены, что они всегда быстрее? Или просто короче?
Moira 19 март 2017, в 11:19
Если вам нужно постоянное время, проверьте мой ответ.
Vishrant 12 нояб. 2017, в 19:39
Рекурсии всегда быстрее ахахахаха, это была хорошая шутка!
firephil 30 март 2019, в 02:49
Показать ещё 1 комментарий

Вы можете сделать это, используя 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

SM ANSARI 24 сен. 2016, в 08:35
Поделиться

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

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 

Vishrant 20 авг. 2017, в 09:56
Поделиться

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

fightlight 11 июль 2018, в 09:15

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

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

GuessWho 28 янв. 2019, в 00:23
Поделиться

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

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

Sameer 16 нояб. 2017, в 06:49
Поделиться

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

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

shmosel 17 авг. 2017, в 21:05
Поделиться

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

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

Ad Infinitum 06 март 2017, в 12:44
Поделиться

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

int sum(int n) < return n%10 + sum(n/10); >

Chris Johnson 26 май 2016, в 01:52
Поделиться

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

Kevin Cruijssen 06 сен. 2016, в 14:23

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

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 > 

Ridham Tarpara 21 апр. 2016, в 18:43
Поделиться

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

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

user1139428 29 март 2016, в 15:40
Поделиться

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

Сумма цифр натурального числа

Ну смотри ты же в цикле прибавляешь последнюю цифру, но с самим то числом ничего не происходит. То есть ты добавляешь одну и ту же цифру.

19 авг 2017 в 9:57

9 ответов 9

Сортировка: Сброс на вариант по умолчанию

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

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

Отслеживать
ответ дан 30 сен 2011 в 8:31
Sergii Kozlov Sergii Kozlov
2,468 16 16 серебряных знаков 13 13 бронзовых знаков
30 сен 2011 в 8:34

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

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

Отслеживать
ответ дан 30 сен 2011 в 9:22
Valeriy Karchov Valeriy Karchov
736 4 4 серебряных знака 9 9 бронзовых знаков
Спасибо за ответ @Valeriy Karchov
30 сен 2011 в 9:25
Подскажите как еще можно подсчитать количество цифр в числе?
30 сен 2011 в 9:26

Крутой вариант! Добавлю тогда еще) while((n/=10) != 0) sum = sum + (n % 10); System.out.println(sum + » «);

30 сен 2011 в 9:33
тогда do sum = sum + (n % 10); while((n/=10) != 0); иначе теряется самая правая цифра
30 сен 2011 в 9:37
30 сен 2011 в 9:38

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

Отслеживать
ответ дан 30 сен 2011 в 8:32
21 2 2 бронзовых знака

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

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 mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на ответ" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f3.0%2f" data-se-share-sheet-license-name="CC BY-SA 3.0" data-s-popover-placement="bottom-start">Поделиться
)" title="">Улучшить ответ
ответ дан 30 сен 2011 в 21:38
3
    Можете пояснить почему? Интересуюсь, потому что часто слышу споры о том, что в таких задачах лучше использовать строки, но без какой-либо аргументации, хотелось бы знать Ваше мнение
    – whalemare
    12 фев 2016 в 9:23
    Что-то я очень сильно сомневаюсь, что ваш вариант будет работать быстрее, чем простое целочисленное деление. А по читабельности вариант с делением (для меня, по крайней мере) отчетливо предпочтительней.
    – m. vokhm
    21 окт 2016 в 18:17
    Это работает раз в десять дольше.
    – Эникейщик
    25 окт 2019 в 8:00
Добавить комментарий|
2

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *