Сумма и произведение цифр числа в Python
Сложить или перемножить цифры числа — задача, встречающаяся почти каждому программисту. Она позволяет не только проверить умение писать код и придумывать правильные алгоритмы, но и даёт возможность оценить синтаксис и функционал используемого языка.
Сумма цифр
Реализация программы на разных языках программирования мало чем отличается. Но из-за концепций и особенностей синтаксиса решение на языке Python получается более коротким и простым, чем, например, решение на C++.
Полный код программы нахождения суммы цифр числа на Python выглядит так:
В первой строке программа запрашивает ввод числа, цифры которого будут складываться.
Во второй строке объявляется переменная, в которую будет записываться сумма. Переменная обязательна должна быть равна нулю. Иначе полученная сумма будет отличаться от реальной (некоторые люди путают сложение и произведение чисел, поэтому пишут не ноль, а единицу).
В цикле while происходит суммирование цифр. В 4 строке программа получает младший разряд числа. Например, если число равно 125, программа получает 5. Полученный младший разряд прибавляется к переменной суммы.
Строка 5: использованный младший разряд отбрасывается (делится на 10), то есть если было 125, то станет 12. Обязательно необходимо использовать целочисленное деление, то есть деление без остатка, иначе цифра не отбросится, а уйдет в дробную часть результата.
В 6 строке программа выводит результат суммирования в консоль. Пример выполнения:
В этом примере мы посчитали с помощью Python сумму цифр трёхзначного числа 555.
Произведение цифр
Программа на Python для вычисления произведения цифр числа имеет похожую структуру и принцип работы. Однако есть некоторые важные отличия:
Во-первых, переменная для хранения произведения равна единице, если присвоить ей ноль, то и само произведения будет всегда равно нулю. Во-вторых, теперь в цикле while очередная цифра не прибавляется к переменной, а является её множителем.
Важный момент, из-за того что оператор умножения имеет более высокий приоритет выполнения, чем оператор остатка от деления, выражение «num % 10» помещается в круглые скобки. Если не сделать этого, программа сначала будет умножать переменную mult на число и только потом брать от неё остаток.
Пример работы программы:
Частные случаи
Рассмотренные варианты программ являются самыми простыми. Однако существует ещё много частных случаев.
Число задано строкой
Когда программа получает ввод с помощью input, интерпретатор автоматически присваивает переменной строковый тип, если попытаться использовать эту переменную в вычислениях, возникнет ошибка.
В рассмотренных скриптах эта проблема была решена следующим образом:
Задано дробное
Если пользователь вводит дробное число, стандартная реализация перестаёт работать. Дробная часть не учитывается, т.к. в программе происходит деление на 10. Даже если преобразовывать введенное число к целому с помощью int , то будут отброшены все дробные цифры.
Рассмотрим программу для вычисления произведения цифр дробного числа (аналогично с суммой):
Пример выполнения программы:
Эта программа правильно вычисляет произведение цифр любого числа:
- Целое.
- Дробное > 1.
- Дробное < 1.
Реализация программы специально была сделана через строки, с помощью функции split введённое число делится на дробную и целую части. Дробная часть обрабатывается также, как и целая.
При приведении к действительному
Подход, описанный выше выбран потому, что из-за неточного представления десятичных дробей в двоичном виде (в котором работает компьютер), реальное представление числа отличается от ожидаемого. В итоге, если пользователь вводит число 0.55, то если привести её к действительному числу с помощью float , в переменную записывается значение 0.54999…8. В итоге, результат получается неточным, если ограничить количество итераций цикла, либо цикл является бесконечным, пример:
Если бы в переменной реально было бы записано значение 5.55, то программа работала бы нормально. Однако в переменную b на самом деле помещается 0,54999… Это приводит к бесконечному выделению и отбрасыванию старшего разряда.
Вот пример вывода полученной программы:
Программа вывела переменную b , как 0.5499999999999998, после умножения на 10, её значение уже будет равно 5.499999999999998. Если вычесть из этого числа 5, то получим 0.4999999999999982. На конце добавилась цифра 2!
Таким образом прошло много итераций и в итоге b стало равно 0. В ходе перемножений среди цифр из которых состояло b были и нули. Поэтому результат равен 0.
Как сложить цифры целого числа в Java?
Мне сложно определить решение этой проблемы. Я пытаюсь разработать программу на Java, которая принимает число, например 321, и находит сумму цифр, в этом случае 3 + 2 + 1 = 6. Мне нужны все цифры любого трехзначного числа, чтобы добавить их вместе, и сохраните это значение, используя символ% остатка. Это меня сбивало с толку, и я был бы признателен за любые идеи.
17 ответов
Выход
Рекурсии всегда быстрее, чем циклы!
Самый короткий и лучший:
Вы можете сделать это, используя Recursion
Если вы любите постоянное время, попробуйте это:
Логика — это если вы добавите любое число на 9, в результате добавление цифры приведет к тому же числу.
Пример: 6 + 9 = 15, затем 1 + 5 = 6 (снова вы получили 6).
В случае десятичной точки удалите его и добавьте итоговые цифры.
Ниже код выполняет трюк:
Суммирует все цифры независимо от размера номера.
Преобразует число в строку, а затем каждый символ сопоставляется с его цифровым значением, вычитая значение ascii ‘0’ (48) и добавляя к окончательной сумме.
Простое решение с использованием потоков:
В дополнение к ответам здесь я могу немного объяснить. Это на самом деле математическая проблема.
321 — общее число 300 + 20 + 1.
Если вы разделите 300 на 100, вы получите 3.
Если вы разделите 20 на 10, вы получите 2.
Если вы разделите 1 на 1, вы получите 1.
В конце этих операций вы можете суммировать их все, и вы получите 6.
Разве вы не можете сделать это рекурсивно что-то вроде этого? Я немного новичок в программировании, но я проследил это, и я думаю, что это работает.
Это должно работать нормально для любого количества цифр, и оно будет возвращать отдельную цифру суммы
Может быть немного поздно.. но вот как вы можете это сделать рекурсивно
Возможно, слишком поздно, но я вижу, что многие решения, размещенные здесь, используют сложность времени O (n ^ 2), это нормально для небольших входов, но по мере того, как вы продвигаетесь с большими входами, вы можете уменьшить временную сложность, Вот что я сделал, чтобы сделать то же самое в линейной временной сложности.
ПРИМЕЧАНИЕ. Второе решение, размещенное Arunkumar, является постоянной временной сложностью.
Пожалуйста, проигнорируйте мое соглашение об именах переменных, я знаю, что это не идеально. Позвольте мне объяснить код с образцом ввода, например. «12345». Выход должен быть 6, в одном обходе.
В основном, что я делаю, я перехожу от LSB к MSB и добавляю цифры найденной суммы на каждой итерации.
Значения выглядят так:
Изначально temp1 = temp2 = 0
Ответ равен 6, и мы избегали одного дополнительного цикла. Надеюсь, это поможет.
Сумма цифр натурального числа
Имеется натуральное число n . Например, оно вводится с клавиатуры вот так:
Как я могу получить сумму цифр этого числа?
вроде как, должно быть так:
через for тоже можно, они взаимозаменяемы с while:
У вас цикл не выполняется ни разу, т.к. n изначально не равно 0.
Поставьте знак != и все должно заработать. И в цикле добавить строчку n /= 10 .
нельзя задачу решать «в лоб». считать число а потом выполнять кучу операций деления это не лучший вариант, когда у вас есть возможность обработать каждый символ отдельно
или ввод с консоли:
Если ввод дан как int , то простейший цикл работает:
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.13.43306
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как складывать цифры числа, до тех пор пока не получится однозначное значение?
Что хочу реализовать:
4+6+5+4+8+7+5+6+4+6+5+7+8 = 75
Число не однозначное. значит
7 + 5 = 12
Число не однозначное, значит
1+2 = 3
Число однозначное — возвращаем 3.
Написал вот такую логику:
При этом выводится число 75. Что не так делаю? В чем ошибка логики?
- Вопрос задан более трёх лет назад
- 5764 просмотра
- Вконтакте

Потому что вы запускаете повторно namerSummer(total); но данные которые вы возвращаете из неё вы не используете. Должно быть что-то вроде этого:
И это не jQuery, это обычный js. Я подробнее наверно не объясню, почитайте про рекурсию