Сумма и произведение цифр числа
Просмотров 11.9к. Обновлено 29 октября 2021
- Присвоить переменной, в которой будет накапливаться сумма цифр, значение 0, а переменной для накопления произведения — значение 1 (если присвоить 0, то при умножении результат обнулится).
- Пока введенное число не уменьшится до нуля выполнять следующие действия:
- В переменную для суммы цифр добавлять последнюю цифру числа, извлеченную при нахождении остатка от деления на 10.
- Значение переменной для хранения произведения цифр умножить на последнюю цифру числа.
- Избавиться от последней цифры числа, разделив его нацело на 10.
Pascal
Сумма цифр числа паскаль
var
n, sum: word;
mult: longint;
begin
readln(n);
sum := 0;
mult := 1;
while n > 0 do begin
sum := sum + n mod 10;
mult := mult * (n mod 10);
n := n div 10;
end;
writeln('Sum: ', sum);
writeln('Mult: ', mult);
end.
462
Sum: 12
Mult: 48
Язык Си
#includemain() {
int n, s, m;
scanf("%d",&n);
s = 0;
m = 1;
while (n>0) {
s += n%10;
m *= n%10;
n = n/10;
}
printf("Сумма: %dnПроизведение: %dn", s, m);
}
245
Сумма: 11
Произведение: 40
Python
Сумма цифр числа python (питон)
n = int(input())
s = 0
m = 1
while n>0:
s += n%10
m *= n%10
n = n//10
print("Сумма:", s)
print("Произведение:", m)
567
Сумма: 18
Произведение: 210
КуМир
алг сумма цифр
нач
цел n, s, m
ввод n
s := 0
m := 1
нц пока n>0
s := s + mod(n,10)
m := m * mod(n,10)
n := div(n,10)
кц
вывод s, нс, m
кон
2932
16
108
Basic-256
input n
sum = 0
mult = 1
while n > 0
sum = sum + n%10
mult = mult * (n%10)
n = n10
endwhile
print "Сумма: " + sum
print "Произведение: " + mult
567
Сумма: 18
Произведение: 210
Сумма и произведение цифр числа
Одной из часто используемых задач для начинающих изучать программирование является нахождение суммы и произведения цифр числа. Число может вводиться с клавиатуры или генерироваться случайно. Задача формулируется так:
Дано число. Найти сумму и произведение его цифр.
Например, сумма цифр числа 253 равна 10-ти, так как 2 + 5 + 3 = 10. Произведение цифр числа 253 равно 30-ти, так как 2 * 5 * 3 = 30.
В данном случае задача осложняется тем, что количество разрядов числа заранее (на момент написания программы) не известно. Это может быть и трехзначное число, как в примере выше, и восьмизначное, и однозначное.
Обычно предполагается, что данная задача должна быть решена арифметическим способом и с использованием цикла. То есть с заданным число должны последовательно выполняться определенные арифметические действия, позволяющие извлечь из него все цифры, затем сложить их и перемножить.
При этом используются операции деления нацело и нахождения остатка. Если число разделить нацело на 10, произойдет “потеря” последней цифры числа. Например, 253 ÷ 10 = 25 (остаток 3). С другой стороны, эта потерянная цифра есть остаток от деления. Получив эту цифру, мы можем добавить ее к сумме цифр и умножить на нее произведение цифр числа.
Пусть n – само число, suma – сумма его цифр, а mult – произведение. Тогда алгоритм нахождения суммы и произведения цифр можно словесно описать так:
- Переменной suma присвоить ноль.
- Переменной mult присвоить единицу. Присваивать 0 нельзя, так как при умножении на ноль результат будет нулевым.
- Пока значение переменной n больше нуля повторять следующие действия:
- Найти остаток от деления значения n на 10, то есть извлечь последнюю цифру числа.
- Добавить извлеченную цифру к сумме и увеличить на эту цифру произведение.
- Избавиться от последнего разряда числа n путем деления нацело на 10.
В языке Python операция нахождения остатка от деления обозначается знаком процента – %
. Деление нацело – двумя слэшами – //
.
Код программы на языке Python
n = int(input()) suma = 0 mult = 1 while n > 0: digit = n % 10 suma = suma + digit mult = mult * digit n = n // 10 print("Сумма:", suma) print("Произведение:", mult)
Пример выполнения:
253 Сумма: 10 Произведение: 30
Изменение значений переменных можно записать в сокращенном виде:
... while n > 0: digit = n % 10 suma += digit mult *= digit n //= 10 ...
Приведенная выше программа подходит только для нахождения суммы и произведения цифр натуральных чисел, то есть целых чисел больше нуля. Если исходное число может быть любым целым, следует учесть обработку отрицательных чисел и нуля.
Если число отрицательное, это не влияет на сумму его цифр. В таком случае достаточно будет использовать встроенную в Python функции abc
, которая возвращает абсолютное значение переданного ей аргумента. Она превратит отрицательное число в положительное, и цикл while
с его условием n > 0
будет работать как и прежде.
Если число равно нулю, то по логике вещей сумма его цифр и их произведение должны иметь нулевые значения. Цикл срабатывать не будет. Поскольку исходное значение mult – это 1, следует добавить проверку на случай, если заданное число – это ноль.
Программа, обрабатывающая все целые числа, может начинаться так:
n = abs(int(input())) suma = 0 mult = 1 if n == 0: mult = 0 ...
Заметим, если в самом числе встречается цифра 0 (например, 503), то произведение всех цифр будет равно нулю. Усложним задачу:
Вводится натуральное число. Найти сумму и произведение цифр, из которых состоит это число. При этом если в числе встречается цифра 0, то ее не надо учитывать при нахождении произведения.
Для решения такой задачи в цикл добавляется проверка извлеченной цифры на ее неравенство нулю. Делать это надо до умножения на нее значения переменной-произведения.
n = int(input()) suma = 0 mult = 1 while n > 0: digit = n % 10 if digit != 0: suma += digit mult *= digit n = n // 10 print("Сумма:", suma) print("Произведение:", mult)
Обратим внимание, что заголовок условного оператора if digit != 0:
в Python можно сократить до просто if digit:
. Потому что 0 – это False
. Все остальные числа считаются истиной.
Приведенный выше математический алгоритм нахождения суммы и произведения цифр числа можно назвать классическим, или универсальным. Подобным способом задачу можно решить на всех императивных языках, независимо от богатства их инструментария. Однако средства языка программирования могут позволить решить задачу другим, зачастую более простым, путем. Например, в Python можно не преобразовывать введенную строку к числу, а извлекать из нее отдельные символы, которые преобразовывать к целочисленному типу int
:
a = input() suma = 0 mult = 1 for digit in a: suma += int(digit) mult *= int(digit) print("Сумма:", suma) print("Произведение:", mult)
Если добавить в код проверку, что извлеченный символ строки действительно является цифрой, то программа станет более универсальной. С ее помощью можно будет считать не только сумму и произведение цифр целых чисел, но и вещественных, а также цифр, извлекаемых из произвольной строки.
n = input() suma = 0 mult = 1 for digit in n: if digit.isdigit(): suma += int(digit) mult *= int(digit) print("Сумма:", suma) print("Произведение:", mult)
Пример выполнения:
это3 чи3с9ло! Сумма: 15 Произведение: 81
Строковый метод isdigit
проверяет, состоит ли строка только из цифр. В нашем случае роль строки играет одиночный, извлеченный на текущей итерации цикла, символ.
Глубокое знание языка Python позволяет решить задачу более экзотическими способами:
import functools n = input() n = [int(digit) for digit in n] suma = sum(n) mult = functools.reduce(lambda x, y: x*y, n) print("Сумма:", suma) print("Произведение:", mult)
Выражение [int(digit) for digit in n]
представляет собой генератор списка. Если была введена строка "234"
, будет получен список чисел: [2, 3, 4]
.
Встроенная функция sum
считает сумму элементов переданного ей аргумента.
Функция reduce
модуля functools
принимает два аргумента – лямбда-выражение и в данном случае список. Здесь в переменной x происходит накопление произведения, а y принимает каждое следующее значение списка.
Больше задач в PDF
Задача взята с acmp.ru (Время: 1 сек. Память: 16 Мб Сложность: 42%)
Задача на внимательность.
Требуется найти наименьшее натуральное число Q такое, что произведение его цифр равно заданному числу N.
Входные данные:
В единственной строке входного файла INPUT.TXT записано одно целое число N (0 ≤ N ≤ 10^9).Выходные данные:
В выходной файл OUTPUT.TXT нужно вывести искомое число Q. В том случае, если такого числа не существует, следует вывести -1.Пример 1:
INPUT.TXT: 10
OUTPUT.TXT : 25Пример 2:
INPUT.TXT: 13
OUTPUT.TXT : -1Пример 3:
INPUT.TXT: 90
OUTPUT.TXT : 259
Итак, от нас требуют найти минимальное число, произведение цифр которого равно заданному значению. Первая мысль, которая может возникнуть — перебирать числа в порядке возрастания, делить их на цифры и перемножать. Однако, с учетом допустимых диапазонов входных данных — работать это будет слишком долго.
На самом деле, в задаче есть смысл стараться подобрать делители числа N. Можно заметить, что если число делится на 8 — то его делителями будут также 2 и 4, однако, 2 разряда дадут однозначно большее число, чем один (8 < 24). Поэтому по возможности надо выбирать как можно большие цифры. Тогда логика решения заключается в том, чтобы делить число на 9 пока делится нацело и считать число девяток, потом на 8 и т.д. Если в результате такой операции получается единица – вывод осуществляется в обратном порядке (от двойки к девятке выводится количество цифр). Если же единицу получить не удалось – выводим -1
(искомого Q не существует).
Дальше остается только учесть все детали. Первое — допустимым значением является ноль, но для такого значения наш алгоритм зациклится — его необходимо обработать отдельно. Кроме того, минимальным натуральным числом, таким, что произведение его цифр равно нулю является 10 (вычислить такое значение никак не получилось бы без перебора).
Другая проблема — если исходное число равно единице. По описанному выше алгоритму мы продолжаем делить число на цифры пока не получим единицу, но если мы получили ее сразу — то у нас нет ни одной цифры и в файл мы ничего не выведем. Поэтому такой случай также стоит обработать отдельно. Итак, финальный исходный код программы мог бы выглядеть следующим образом:
#include <fstream> #include <algorithm> using namespace std; int main() { ifstream ifst("input.txt"); ofstream ofst("output.txt"); long long n; unsigned long long digits[10]; ifst >> n; if (0 == n) { ofst << 10; return 0; } if (1 == n) { ofst << 1; return 0; } for (int i = 9; i > 1; --i) { digits[i] = 0; while (n%i == 0) { n/=i; digits[i]++; } } if (n == 1) { for (int i = 2; i <= 9; ++i) { while (digits[i]) { digits[i]--; ofst << i; } } } else { ofst << -1; } }
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a number, the task is to find the product of the digits of a number.
Examples:
Input: n = 4513 Output: 60 Input: n = 5249 Output: 360
General Algorithm for product of digits in a given number:
- Get the number
- Declare a variable to store the product and set it to 1
- Repeat the next two steps till the number is not 0
- Get the rightmost digit of the number with help of remainder ‘%’ operator by dividing it with 10 and multiply it with product.
- Divide the number by 10 with help of ‘/’ operator
- Print or return the product.
Below is the solution to get the product of the digits:
C++
#include<bits/stdc++.h>
using
namespace
std;
int
getProduct(
int
n)
{
int
product = 1;
while
(n != 0)
{
product = product * (n % 10);
n = n / 10;
}
return
product;
}
int
main()
{
int
n = 4513;
cout << (getProduct(n));
}
Java
import
java.io.*;
class
GFG {
static
int
getProduct(
int
n)
{
int
product =
1
;
while
(n !=
0
) {
product = product * (n %
10
);
n = n /
10
;
}
return
product;
}
public
static
void
main(String[] args)
{
int
n =
4513
;
System.out.println(getProduct(n));
}
}
Python3
def
getProduct(n):
product
=
1
while
(n !
=
0
):
product
=
product
*
(n
%
10
)
n
=
n
/
/
10
return
product
n
=
4513
print
(getProduct(n))
C#
using
System;
class
GFG
{
static
int
getProduct(
int
n)
{
int
product = 1;
while
(n != 0)
{
product = product * (n % 10);
n = n / 10;
}
return
product;
}
public
static
void
Main()
{
int
n = 4513;
Console.WriteLine(getProduct(n));
}
}
PHP
<?php
<?php
function
getProduct(
$n
)
{
$product
= 1;
while
(
$n
!= 0)
{
$product
=
$product
* (
$n
% 10);
$n
= intdiv(
$n
, 10);
}
return
$product
;
}
$n
= 4513;
echo
getProduct(
$n
);
?>
Javascript
<script>
function
getProduct(n)
{
let product = 1;
while
(n != 0)
{
product = product * (n % 10);
n = Math.floor(n / 10);
}
return
product;
}
let n = 4513;
document.write(getProduct(n));
</script>
Time Complexity: O(log10N)
Auxiliary Space: O(1)
Method #2:Using string() method:
- Convert the integer to string
- Traverse the string and multiply the characters by converting them to integer
When this method can be used?: When the number of digits of a number exceeds , we can’t take that number as an integer since the range of long long int doesn’t satisfy the given number. So take input as a string, run a loop from start to the length of the string and increase the sum with that character(in this case it is numeric)
Below is the implementation:
C++
#include <iostream>
using
namespace
std;
int
getProduct(string str)
{
int
product = 1;
for
(
int
i = 0; i < str.length(); i++) {
product = product * (str[i] - 48);
}
return
product;
}
int
main()
{
string st =
"4513"
;
cout << getProduct(st);
return
0;
}
Java
import
java.io.*;
class
GFG {
static
int
getProduct(String str)
{
int
product =
1
;
for
(
int
i =
0
; i < str.length(); i++)
{
product *= str.charAt(i) -
'0'
;
}
return
product;
}
public
static
void
main(String[] args)
{
String st =
"4513"
;
System.out.println(getProduct(st));
}
}
Python3
def
getProduct(n):
product
=
1
num
=
str
(n)
for
i
in
num:
product
=
product
*
int
(i)
return
product
n
=
4513
print
(getProduct(n))
C#
using
System;
using
System.Collections;
class
GFG
{
static
int
getProduct(String str)
{
int
product = 1;
for
(
int
i = 0; i < str.Length; i++)
{
product = product * (str[i] - 48);
}
return
product;
}
public
static
void
Main(String[] args)
{
String st =
"4513"
;
Console.Write(getProduct(st));
}
}
Javascript
<script>
function
getProduct(str)
{
let product = 1;
for
(let i = 0; i < str.length; i++)
{
product = product * (parseInt(str[i]));
}
return
product;
}
let st =
"4513"
;
document.write(getProduct(st));
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Method #3: Recursion
- Get the number
- Get the remainder and pass the next remaining digits
- Get the rightmost digit of the number with help of the remainder ‘%’ operator by dividing it by 10 and multiply it to the product.
- Divide the number by 10 with help of ‘/’ operator to remove the rightmost digit
- Check the base case with n = 0
- Print or return the product
C++
#include <iostream>
using
namespace
std;
int
getProduct(
int
n){
if
(n == 0){
return
1 ;
}
return
(n%10) * getProduct(n/10) ;
}
int
main() {
cout<<getProduct(125) ;
return
0;
}
Java
import
java.util.*;
class
GFG
{
static
int
getProduct(
int
n)
{
if
(n ==
0
){
return
1
;
}
return
(n%
10
) * getProduct(n/
10
) ;
}
public
static
void
main(String[] args)
{
System.out.println(getProduct(
125
));
}
}
Python3
def
getProduct(n):
if
(n
=
=
0
):
return
1
return
(n
%
10
)
*
getProduct(n
/
/
10
) ;
print
(getProduct(
125
));
C#
using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
getProduct(
int
n)
{
if
(n == 0){
return
1 ;
}
return
(n%10) * getProduct(n/10) ;
}
public
static
void
Main(
string
[] args)
{
Console.WriteLine(getProduct(125));
}
}
Javascript
function
getProduct(n){
if
(n == 0){
return
1 ;
}
return
(n%10) * getProduct(Math.floor(n/10)) ;
}
console.log(getProduct(125));
Time Complexity: O(log10N)
Auxiliary Space: O(1)
Last Updated :
13 Mar, 2023
Like Article
Save Article
3 / 3 / 1 Регистрация: 29.01.2010 Сообщений: 113 |
|
1 |
|
Найти произведение цифр числа18.04.2010, 15:22. Показов 6830. Ответов 6
Помогите решить задания!!!!!!!!!!!!!!! Буду очень благодарен….. Миниатюры
0 |
yanyk1n 4341 / 1473 / 680 Регистрация: 12.03.2009 Сообщений: 5,310 |
||||
18.04.2010, 15:33 |
2 |
|||
2)
1 |
STGE 773 / 578 / 324 Регистрация: 17.06.2009 Сообщений: 1,188 |
||||
18.04.2010, 15:35 |
3 |
|||
2.
1 |
yanyk1n 4341 / 1473 / 680 Регистрация: 12.03.2009 Сообщений: 5,310 |
||||||||
18.04.2010, 15:36 |
4 |
|||||||
3)
Добавлено через 1 минуту
1 |
STGE 773 / 578 / 324 Регистрация: 17.06.2009 Сообщений: 1,188 |
||||
18.04.2010, 15:37 |
5 |
|||
4.
1 |
yanyk1n 4341 / 1473 / 680 Регистрация: 12.03.2009 Сообщений: 5,310 |
||||
18.04.2010, 15:43 |
6 |
|||
6)
1 |
3 / 3 / 1 Регистрация: 29.01.2010 Сообщений: 113 |
|
18.04.2010, 18:16 [ТС] |
7 |
Помогите решить задания!!!!!!!!!!!!!!! Буду очень благодарен….. А вот еще необходимо составить блок-схемы к заданиям….
0 |