0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
1

Вычислить сумму цифр суммы цифр заданного натурального числа используя рекурсивный алгоритм

09.05.2015, 21:11. Показов 5702. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вычислить сумму цифр суммы цифр заданного натурального числа используя рекурсивный алгоритм.

Входные данные:
Во входном потоке задано единственное натуральное число N (N <= 2000000000)

Выходные данные:
В выходной поток вывести единственное целое число.

Пример входного файла (input.txt):
12345
Пример выходного файла (output.txt):
6

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var n:longint;
function sum(n:longint):longint;
var a,t:longint;
begin
t:=0; a:=0;
while(n <>0) do
begin
a:=n mod 10;
t:=t+a;
n:=n div 10;
end;
sum:=t;
end;
begin
read(n);
n:=sum(n);
write(sum(n));
end.
Помогите исправить ( В программе обнаружено запрещенное служебное слово while, компиляция невозможна.)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2015, 21:11
Ответы с готовыми решениями:

Вычислить сумму четных цифр заданного натурального числа
Входные данные: Во входном потоке задано единственное натуральное число N (N &lt;= 2000000000) ...

Вычислить сумму нечётных цифр заданного натурального числа.
Вычислить сумму нечетных цифр заданного натурального числа. Входные данные: Во входном потоке...

Вычислить сумму квадратов цифр заданного натурального числа N
Например, для заданного числа 123 вычислить .

Вычислить сумму цифр заданного натурального двухзначного числа A
Вычислить сумму цифр заданного натурального двухзначного числа A. Входные данные: Во входном...

10
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
09.05.2015, 23:18 2
Цитата Сообщение от Николайчик Посмотреть сообщение
В программе обнаружено запрещенное служебное слово while, компиляция невозможна.
Николайчик, да не может того быть!
проверь, ты точно в Pascal ABC пробуешь этот код.
я себе программу скопировал в Pascal ABC - всё работает! (хотя, код, конечно, не красивый...)
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
10.05.2015, 05:36 3
через рекурсию:
Pascal
1
2
3
4
5
6
7
8
9
10
function rec(n:longint):longint;
begin
  if n>0 then rec:=n mod 10+rec(n div 10) else rec:=0;
end;
var
  n:longint;
begin
  write('n=');readln(n);
  writeln('сумма цифр:',rec(n));
end.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
10.05.2015, 06:12 4
Цитата Сообщение от Николайчик Посмотреть сообщение
используя рекурсивный алгоритм.
Цитата Сообщение от Николайчик Посмотреть сообщение
В программе обнаружено запрещенное служебное слово while
Естественно, для рекурсивного алгоритма в понятии проверочной системы оно запрещенное, как и for, repeat
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
10.05.2015, 10:42 5
Цитата Сообщение от Joy Посмотреть сообщение
через рекурсию:
неверно.
пропустили момент - в условии сказано
Вычислить сумму цифр суммы цифр
попробуйте вашу программу на исходном примере, получите не 6 (как надо), а 15

Но доделать очень просто - нужно рекурсивно вызывать процедуру получения суммы цифр, пока не получится число меньше 10:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function rec(n:longint):longint;
begin
  if n>0 then rec:=n mod 10+rec(n div 10) else rec:=0;
end;
 
function sumrec(n:longint):longint;
begin
  if n>10
    then sumrec := sumrec(rec(n))
    else sumrec := rec(n)
end;
 
var
  n:longint;
begin
  write('n=');readln(n);
  writeln('сумма цифр:',sumrec(n));
end.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
10.05.2015, 11:37 6
Цитата Сообщение от Николайчик Посмотреть сообщение
Вычислить сумму цифр суммы цифр заданного натурального числа
Это видимо значит что функцию нужно вызвать дважды, а не пока результат больше 10. Это не про цифровой корень.
0
0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
10.05.2015, 12:01  [ТС] 7
Цитата Сообщение от Sergio Leone Посмотреть сообщение
неверно.
пропустили момент - в условии сказано
попробуйте вашу программу на исходном примере, получите не 6 (как надо), а 15

Но доделать очень просто - нужно рекурсивно вызывать процедуру получения суммы цифр, пока не получится число меньше 10:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function rec(n:longint):longint;
begin
  if n>0 then rec:=n mod 10+rec(n div 10) else rec:=0;
end;
 
function sumrec(n:longint):longint;
begin
  if n>10
    then sumrec := sumrec(rec(n))
    else sumrec := rec(n)
end;
 
var
  n:longint;
begin
  write('n=');readln(n);
  writeln('сумма цифр:',sumrec(n));
end.
Не получилось чтобы >10. Второй тест не прошел.

Добавлено через 1 минуту
Цитата Сообщение от Puporev Посмотреть сообщение
Это видимо значит что функцию нужно вызвать дважды, а не пока результат больше 10. Это не про цифровой корень.
В смысле, можете показать?
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
10.05.2015, 13:19 8
Цитата Сообщение от Николайчик Посмотреть сообщение
сумму цифр суммы цифр
Делаешь одну функцию нахождения суммы цифр числа и 2 раза вызываешь
Pascal
1
2
3
n:=sum(n);
n:=sum(n);
write(n);
0
0 / 0 / 1
Регистрация: 23.11.2014
Сообщений: 136
10.05.2015, 14:33  [ТС] 9
Цитата Сообщение от Puporev Посмотреть сообщение
Делаешь одну функцию нахождения суммы цифр числа и 2 раза вызываешь
Pascal
1
2
3
n:=sum(n);
n:=sum(n);
write(n);
Так?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function sumrec(n:longint):longint;
begin
  if n>10
    then sumrec := sumrec(rec(n))
    else sumrec := rec(n)
end;
 
var
  n:longint;
begin
 n:=sum(n);
n:=sum(n);
write(n);
end.
0
Puporev
10.05.2015, 15:15
  #10

Не по теме:

Цитата Сообщение от Николайчик Посмотреть сообщение
Так?
Сказал бы я как, да обидишься...

0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
10.05.2015, 19:23 11
Цитата Сообщение от Николайчик Посмотреть сообщение
Так?
нет, не так.

забудьте про мою sumrec! (она как раз суммирует пока не останется число меньше 10 - т.е. ищет цифровой корень).

попробуйте такой код:
Pascal
1
2
3
4
5
6
7
8
9
10
function rec(n:longint):longint;
begin
  if n>0 then rec:=n mod 10+rec(n div 10) else rec:=0;
end;
var
  n:longint;
begin
  write('n=');readln(n);
  writeln('сумма цифр:',rec(rec(n)));
end.
2
10.05.2015, 19:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2015, 19:23
Помогаю со студенческими работами здесь

Вычислить количество цифр натурального числа применить в программе рекурсивный алгоритм
Вычислить количество цифр натурального числа применить в программе рекурсивный алгоритм

Подсчитать количество цифр в заданном натуральном числе и найдите сумму цифр заданного натурального числа
Подсчитать количество цифр в заданном натуральном числе и найдите сумму цифр заданного натурального...

Рекурсивный метод для вычисления количества цифр заданного натурального числа
4. Разработать рекурсивный метод, возвращающий значение: для вычисления количества цифр заданного...

Подсчитать сумму цифр последнего положительного числа, используя для счета суммы цифр функцию
С клавиатуры вводятся 15 чисел , посчитать сумму чисел последнего положительного числа ,...

Нахождение суммы цифр заданного натурального числа
найти сумму цифр заданного натурального числа.

Нахождение суммы цифр заданного натурального числа
скажите, пожалуйста, как написать скрипт, который будет находить сумму цифр заданного натурального...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru