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

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

Восстановить пароль Регистрация
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:16     Сумма цифр натурального числа #1
люди, обясните мне пожалуста как работает ета функция
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 секунды
програма должна быть сделана через рекурсию.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 20:16     Сумма цифр натурального числа
Посмотрите здесь:

Сумма цифр натурального числа C++
C++ Сумма цифр натурального числа
Сумма цифр натурального числа посредством рекурсии C++
Сумма каких-либо двух цифр заданного трехзначного натурального числа N равна третьей цифре. C++
C++ Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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;
}
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;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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;
}
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:41  [ТС]     Сумма цифр натурального числа #5
блин, всеравно не понял((

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

Добавлено через 6 минут
а нет(( для двоцифрового числа понял, а как тогда для 3, 4, 5... числа считает(оно считает но я непойму как)?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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;
}
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 20:54  [ТС]     Сумма цифр натурального числа #7
меня интересует вот ето именно
C++
1
return (x%10+suma(x/10));
если можно то обясните пошагово на примере, ну пускай числа 1435
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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 и будет суммой цифр.
Бррррррррр, рекурсию в линейку расписал..жесть =)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 21:45     Сумма цифр натурального числа
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
16.10.2012, 21:45  [ТС]     Сумма цифр натурального числа #9
Croessmah, большое спасибо, очень большое спасибо, тепер я наконец понял как работает ета функция. еще раз большое спасибо!!!
Yandex
Объявления
16.10.2012, 21:45     Сумма цифр натурального числа
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru