Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
#1

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

16.10.2012, 20:16. Просмотров 903. Ответов 8
Метки нет (Все метки)

люди, обясните мне пожалуста как работает ета функция
C++
1
2
3
{
    return n ? n % 10 + suma(n / 10) : 0;
}
, полностью опишите как ето работает, и если есть более "нубский" вариант етой функции то напишите, а то ета функция работает но как я не знаю. мне надо здать лабараторку, и препод сразу поймет что ето не моя функция.
вот весь код, если что
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<conio.h>
#include<stdio.h>
int suma(int n)
{
    return n ? n % 10 + suma(n / 10) : 0;
}
int main()
{
printf("Vvedite chislo n");
int n, s;
scanf("%d", &n);
s=suma(n);
printf("s=%d", s);
getch();
return 0;
}
Добавлено через 54 секунды
програма должна быть сделана через рекурсию.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сумма цифр натурального числа (C++):

Сумма цифр натурального числа - C++
Рассмотрим произвольное натуральное число и найдём сумму его цифр,затем сумму цифр полученного числа и так далее, пока не получиться...

Сумма цифр натурального числа - C++
Нужна помощь по следующей задаче: {Дано натуральное число. Найдите сумму цифр данного числа. Написать рекурсивную функцию} Смотрел в...

Сумма цифр натурального числа посредством рекурсии - C++
Необходимо найти сумму цифр натурального числа используя отдельную функцию с рекурсией. Пару программ писал на простое нахождение суммы...

Определить, в какой из систем счисления сумма всех цифр натурального числа имеет наибольшее значение - C++
C++ Определить, в какой из систем счисления сумма всех цифр натурального числа имеет наибольшее значение. Основания систем счисления:...

Сумма каких-либо двух цифр заданного трехзначного натурального числа N равна третьей цифре. - C++
Помогите решить задачу. Сумма каких-либо двух цифр заданного трехзначного натурального числа N равна третьей цифре. Заранее спасибо.

Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма - C++
Помогите написать пожалуйста программу на C++ Oпределить функцию для расчета суммы цифр натурального числа. Входной параметр – число....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13216 / 7488 / 843
Регистрация: 27.09.2012
Сообщений: 18,406
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 20:20 #2
Аналог, только без сокращенной записи условия
C++
1
2
3
4
5
6
7
int suma(int n)
{
    if(n!=0)
        return (n%10+suma(n/10));
    else
        return 0;
}
1
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:25  [ТС] #3
о, большое спасибо, теперь все понятно стало)

Добавлено через 2 минуты
а теперь, ну очень нубский вопрос: здесь есть рекурсия??? или ето простая функуция, если рекурсия то как она вызывает сама себя в даной задаче?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<conio.h>
#include<stdio.h>
int suma(int n)
{
    if(n!=0)
        return (n%10+suma(n/10));
    else
        return 0;
}
int main()
{
printf("Vvedite chislo n");
int n, s;
scanf("%d", &n);
s=suma(n);
printf("s=%d", s);
getch();
return 0;
}
0
Croessmah
Эксперт CЭксперт С++
13216 / 7488 / 843
Регистрация: 27.09.2012
Сообщений: 18,406
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 20:30 #4
Рекурсия есть =)
C++
1
2
3
4
5
6
7
int suma(int n)
{
    if(n!=0)
        return (n%10+suma(n/10));//Функция вызывает "сама себя" с аргументов в n/10
    else
        return 0;
}
1
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:41  [ТС] #5
блин, всеравно не понял((

Добавлено через 3 минуты
уже не надо, сам все понял=)

Добавлено через 6 минут
а нет(( для двоцифрового числа понял, а как тогда для 3, 4, 5... числа считает(оно считает но я непойму как)?
0
Croessmah
Эксперт CЭксперт С++
13216 / 7488 / 843
Регистрация: 27.09.2012
Сообщений: 18,406
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 20:51 #6
C++
1
2
3
4
5
6
7
8
int suma(int n)
{
    printf ("\tVyzvana funkciya SUMA s argumentom n = %d\n",n);
    if(n!=0)
        return (n%10+suma(n/10));
    else
        return 0;
}
1
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:54  [ТС] #7
меня интересует вот ето именно
C++
1
return (x%10+suma(x/10));
если можно то обясните пошагово на примере, ну пускай числа 1435
1
Croessmah
Эксперт CЭксперт С++
13216 / 7488 / 843
Регистрация: 27.09.2012
Сообщений: 18,406
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 21:37 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
0.0 Из main вызываем suma с аргументом 1435

1.1 x=1435
1.2 сравнение x с 0.
1.2.0 Если x=0, тогда возвращаем 0 вызывающей функции и выходим из функции.
1.2.1 Если x!=0, тогда
1.2.3 остаток от деления x%10 = 5 //Запомни, 5!
1.2.4 вызываем функцию suma с аргументом x/10 = 143 и ждем ее завершения (тут переход на пункт 2.1)
1.2.5 складываем 5 и то, что вернет функция suma(143)

2.1 Начинает работать функция с x=143
2.2 сравнение x с 0.
2.2.0 Если x=0, тогда возвращаем 0 вызывающей функции и выходим из функции.
2.2.1 Если x!=0, тогда
2.2.3 остаток от деления x%10 = 3 //Запомни, 3!
2.2.4 вызываем функцию suma с аргументом x/10 = 14 и ждем ее завершения (тут переход на пункт 3.1)
2.2.5 складываем 3 и то, что вернет функция suma(14)

3.1 Начинает работать функция с x=14
3.2 сравнение x с 0.
3.2.0 Если x=0, тогда возвращаем 0 вызывающей функции и выходим из функции.
3.2.1 Если x!=0, тогда
3.2.3 остаток от деления x%10 = 4 //Запомни, 4!
3.2.4 вызываем функцию suma с аргументом x/10 = 1 и ждем ее завершения (тут переход на пункт 4.1)
3.2.5 складываем 4 и то, что вернет функция suma(1)

4.1 Начинает работать функция с x=1
4.2 сравнение x с 0.
4.2.0 Если x=0, тогда возвращаем 0 вызывающей функции и выходим из функции.
4.2.1 Если x!=0, тогда
4.2.3 остаток от деления x%10 = 1 //Запомни, 1!
4.2.4 вызываем функцию suma с аргументом x/10 = 0 и ждем ее завершения (тут переход на пункт 5.1)
4.2.5 складываем 1 и то, что вернет функция suma(0)

5.1 Начинает работать функция с x=0
5.2 сравнение x с 0.
5.2.0 Если x=0, тогда возвращаем 0 вызывающей функции и выходим из функции.//Сейчас x равен 0

Теперь все функции начнут поочередно заканчиваться.
Функция №5 вернет 0 в функцию №4
Функция №4 вернет 1 в функцию №3 (пункт 4.2.5 1+0=1)
Функция №3 вернет 5 в функцию №2 (пункт 3.2.5 4+1=5)
Функция №2 вернет 8 в функцию №1 (пункт 2.2.5 3+5=8)
Функция №1 вернет 13 в функцию main (пункт 2.2.5 5+8=13)

13 и будет суммой цифр.
Бррррррррр, рекурсию в линейку расписал..жесть =)))
7
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 21:45  [ТС] #9
Croessmah, большое спасибо, очень большое спасибо, тепер я наконец понял как работает ета функция. еще раз большое спасибо!!!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 21:45
Привет! Вот еще темы с ответами:

Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма. - C++
Помогите пожалуйста написать программу на с++ очень нужно Определить функцию для расчета суммы цифр натурального числа. Входной параметр...

Найдите такие натуральные числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7 - C++
Помогите пожалуйста с задачей. Найдите натуральные числа такие, чтобы сумма их цифр следующего за ним числа делилась на 7. (язык С++)...

Найти простые числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа, делилась на 7 - C++
задание:&quot;найдите простые числа такие, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7&quot; помогите...

Определить для числа: является ли сумма его цифр двузначным числом; больше ли сумма его цифр числа "а" - C++
4.24. Дано двузначное число. Определить: а) является ли сумма его цифр двузначным числом; б) больше ли числа &quot;a&quot; сумма его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2012, 21:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru