Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 20
1

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

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

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

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

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

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

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

13
4772 / 2233 / 283
Регистрация: 01.03.2013
Сообщений: 5,875
Записей в блоге: 25
25.10.2014, 10:56 2
C++
1
int tst(int n) {return n<10 ? 1 : 1 + tst(n/10);}
1
С чаем беда...
Эксперт CЭксперт С++
9452 / 4944 / 1352
Регистрация: 18.10.2014
Сообщений: 11,513
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
Модератор
Эксперт по электронике
8574 / 6389 / 860
Регистрация: 14.02.2011
Сообщений: 22,235
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
4772 / 2233 / 283
Регистрация: 01.03.2013
Сообщений: 5,875
Записей в блоге: 25
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Эксперт С++
9452 / 4944 / 1352
Регистрация: 18.10.2014
Сообщений: 11,513
25.10.2014, 11:43 7
Цитата Сообщение от ValeryS Посмотреть сообщение
в буфер по нулевому адресу заносим -1 символ?
Когда в функцию 'snprintf' передается нулевой размер буфера, функция выполняет "холостой прогон", т.е. возвращает количество якобы записанных символов, но ничего никуда не записывает. При этом разрешается в качестве указателя на буфер передать null pointer.

Описание по вашей ссылке - не полно.
2
4772 / 2233 / 283
Регистрация: 01.03.2013
Сообщений: 5,875
Записей в блоге: 25
25.10.2014, 11:49 8
А вообще, правильный совет
Цитата Сообщение от kitayaz Посмотреть сообщение
Читай книги, они тебе помогут, Лёха
Маст рид для юных сурков: http://www.tvd-home.ru/recursion Ну и про хвостовую, аккумуляторы и т.п....
0
Модератор
Эксперт по электронике
8574 / 6389 / 860
Регистрация: 14.02.2011
Сообщений: 22,235
25.10.2014, 12:04 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
функция выполняет "холостой прогон", т.е. возвращает количество якобы записанных символов, но ничего никуда не записывает.
тогда зачем она нужна?
на экран выводит?
0
С чаем беда...
Эксперт CЭксперт С++
9452 / 4944 / 1352
Регистрация: 18.10.2014
Сообщений: 11,513
25.10.2014, 12:09 10
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда зачем она нужна?
Это ценнейшая функциональность! Это делается для того, чтобы вы могли сначала выполнить холостой прогон, получить необходимое количество символов в качестве результата, затем выделить память под буфер соответствующего размера и после этого уже выполнить реальный вызов 'snprintf' с записью результата в выделенный буфер.

Цитата Сообщение от ValeryS Посмотреть сообщение
на экран выводит?
Нет, ничего никуда не выводит.
2
Модератор
Эксперт С++
11488 / 9404 / 5651
Регистрация: 18.12.2011
Сообщений: 25,120
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Эксперт С++
9452 / 4944 / 1352
Регистрация: 18.10.2014
Сообщений: 11,513
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
Модератор
Эксперт по электронике
8574 / 6389 / 860
Регистрация: 14.02.2011
Сообщений: 22,235
25.10.2014, 12:56 13
TheCalligrapher,
тогда получается всю работу, по подсчету символов на себя берет snprintf
а рекурсия так, "шоб было"?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вызывать как
C++
1
digits( ваше число, rand())
;
а если rand() выдаст максимальное число?
65 тысяч глубина вложений
0
С чаем беда...
Эксперт CЭксперт С++
9452 / 4944 / 1352
Регистрация: 18.10.2014
Сообщений: 11,513
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
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 - 2022, CyberForum.ru