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

Написать рекурсивную функцию вычисления количества цифр натурального числа

25.10.2014, 10:45. Показов 3474. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать рекурсивную функцию вычисления количества цифр натурального числа.
Помогите пожалуйста, сижу на паре, сейчас лаба идет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2014, 10:45
Ответы с готовыми решениями:

Написать рекурсивную функцию вычисления количества цифр натурального числа
Как написать рекурсивную функцию вычисления количества цифр натурального числа?

Написать рекурсивную функцию вычисления количества цифр натурального числа(исправить код)
Написать рекурсивную функцию вычисления количества цифр натурального числа. Я вот написал, но...

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

Написать рекурсивную функцию вычисления суммы цифр натурального числа
Нужно написать рекурсивную функцию вычисления суммы цифр натурального числа. Я написал...

13
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
25.10.2014, 10:56 2
C++
1
int tst(int n) {return n<10 ? 1 : 1 + tst(n/10);}
1
Вездепух
Эксперт CЭксперт С++
11750 / 6425 / 1730
Регистрация: 18.10.2014
Сообщений: 16,217
25.10.2014, 11:20 3
C++
1
2
3
4
unsigned digits(unsigned n, unsigned depth)
{
  return depth > 0 ? digits(n, depth - 1) : snprintf(NULL, 0, "%u", n);
}
Вызывать как

C++
1
digits( ваше число, rand());
2
Модератор
Эксперт по электронике
8924 / 6691 / 920
Регистрация: 14.02.2011
Сообщений: 23,581
25.10.2014, 11:35 4
_Ivana,
а можно и так
C++
1
2
3
4
5
6
7
int fnc(unsigned int n)
{
if(!n)
 return 0;
 
return fnc(n/10)+1;
}
TheCalligrapher,
не понял
почему минус, зачем рандомное число, зачем n он не изменяется и в конце выведется то что пришло в функцию

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
snprintf(NULL, 0, "%u", n);
в буфер по нулевому адресу заносим -1 символ?
http://lord-n.narod.ru/downloa... printf.htm
1
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 11
25.10.2014, 11:41 5
Читай книги, они тебе помогут, Лёха
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
25.10.2014, 11:42 6
ValeryS, да можно хоть как
C++
1
2
3
int tst_(int n, int a) {return n ? tst_(n/10, a+1) : a;}
.......
cout << tst_(n, 0);
0
Вездепух
Эксперт CЭксперт С++
11750 / 6425 / 1730
Регистрация: 18.10.2014
Сообщений: 16,217
25.10.2014, 11:43 7
Цитата Сообщение от ValeryS Посмотреть сообщение
в буфер по нулевому адресу заносим -1 символ?
Когда в функцию 'snprintf' передается нулевой размер буфера, функция выполняет "холостой прогон", т.е. возвращает количество якобы записанных символов, но ничего никуда не записывает. При этом разрешается в качестве указателя на буфер передать null pointer.

Описание по вашей ссылке - не полно.
2
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
25.10.2014, 11:49 8
А вообще, правильный совет
Цитата Сообщение от kitayaz Посмотреть сообщение
Читай книги, они тебе помогут, Лёха
Маст рид для юных сурков: http://www.tvd-home.ru/recursion Ну и про хвостовую, аккумуляторы и т.п....
0
Модератор
Эксперт по электронике
8924 / 6691 / 920
Регистрация: 14.02.2011
Сообщений: 23,581
25.10.2014, 12:04 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
функция выполняет "холостой прогон", т.е. возвращает количество якобы записанных символов, но ничего никуда не записывает.
тогда зачем она нужна?
на экран выводит?
0
Вездепух
Эксперт CЭксперт С++
11750 / 6425 / 1730
Регистрация: 18.10.2014
Сообщений: 16,217
25.10.2014, 12:09 10
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда зачем она нужна?
Это ценнейшая функциональность! Это делается для того, чтобы вы могли сначала выполнить холостой прогон, получить необходимое количество символов в качестве результата, затем выделить память под буфер соответствующего размера и после этого уже выполнить реальный вызов 'snprintf' с записью результата в выделенный буфер.

Цитата Сообщение от ValeryS Посмотреть сообщение
на экран выводит?
Нет, ничего никуда не выводит.
2
Модератор
Эксперт С++
13585 / 10819 / 6438
Регистрация: 18.12.2011
Сообщений: 28,849
25.10.2014, 12:28 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Когда в функцию 'snprintf' передается нулевой размер буфера, функция выполняет "холостой прогон",
В документации написано
If buffer is a null pointer and count is nonzero, or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, these functions return -1 and set errno to EINVAL.
А про count=0 ничего не сказано.
Так что, функция вроде и не обязана возвращать количество символов.
Что Вы на это скажете?
0
Вездепух
Эксперт CЭксперт С++
11750 / 6425 / 1730
Регистрация: 18.10.2014
Сообщений: 16,217
25.10.2014, 12:34 12
Я за такой информацией хожу непосредственно в стандарт языка

7.19.6.5 The snprintf function
Synopsis
1 #include <stdio.h>
int sprintf(char * restrict s,
const char * restrict format, ...);

Description
2 The snprintf function is equivalent to fprintf, except that the output is written into
an array (specified by argument s) rather than to a stream. If n is zero, nothing is written,
and s may be a null pointer. Otherwise, output characters beyond the n-1st are
discarded rather than being written to the array, and a null character is written at the end
of the characters actually written into the array. If copying takes place between objects
that overlap, the behavior is undefined.

Returns
3 The snprintf function returns the number of characters that would have been written
had n been sufficiently large, not counting the terminating null character, or a negative
value if an encoding error occurred. Thus, the null-terminated output has been
completely written if and only if the returned value is nonnegative and less than n.
0
Модератор
Эксперт по электронике
8924 / 6691 / 920
Регистрация: 14.02.2011
Сообщений: 23,581
25.10.2014, 12:56 13
TheCalligrapher,
тогда получается всю работу, по подсчету символов на себя берет snprintf
а рекурсия так, "шоб было"?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вызывать как
C++
1
digits( ваше число, rand())
;
а если rand() выдаст максимальное число?
65 тысяч глубина вложений
0
Вездепух
Эксперт CЭксперт С++
11750 / 6425 / 1730
Регистрация: 18.10.2014
Сообщений: 16,217
25.10.2014, 18:11 14
Цитата Сообщение от zss Посмотреть сообщение
Что Вы на это скажете?
Также еще тут http://linux.die.net/man/3/snprintf пишут следующее

Concerning the return value of snprintf(), SUSv2 and C99 contradict each other: when snprintf() is called with size=0 then SUSv2 stipulates an unspecified return value less than 1, while C99 allows str to be NULL in this case, and gives the return value (as always) as the number of characters that would have been written in case the output string has been large enough.
Разумеется, побеждает в итоге С99. А источники, которые не говорят о таком использовании 'snprintf' - это что-то устаревше-нестандартное.

Добавлено через 6 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
TheCalligrapher,
тогда получается всю работу, по подсчету символов на себя берет snprintf
а рекурсия так, "шоб было"?
Да, именно так.

Цитата Сообщение от ValeryS Посмотреть сообщение
а если rand() выдаст максимальное число?
65 тысяч глубина вложений
А кому сейчас легко? Локальных переменных нет... Я думаю и 65 тысяч мы переживем. Хотя уважающий себя rand может выдать и больше... В общем, с rand-ом я наверное погорячился. Я использовал его специально, чтобы было сразу видно, что это - лишнее. Надо было просто 42 написать...
1
25.10.2014, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2014, 18:11
Помогаю со студенческими работами здесь

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

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

Написать рекурсивную функцию для нахождения произведения цифр натурального числа
.Написать рекурсивную функцию для нахождения произведения цифр натурального числа. С помощью этой...

Найти m! + (m+n)!, создав рекурсивную функцию для вычисления факториала произвольного натурального числа. C++
Вот программа с рекурсией напишите без рекурсии пожалуйста #include #include using namespace...


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

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

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