Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2015, 19:53   #1
leonidzilb
Новичок
Джуниор
 
Регистрация: 11.07.2015
Сообщений: 4
По умолчанию переворот числа рекурсия

попалась интересная задача
перевернуть число с помощью рекурсии
например 835->538
нет даже мысли как это сделать
leonidzilb вне форума Ответить с цитированием
Старый 11.07.2015, 20:08   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Друже, язык какой?
Poma][a вне форума Ответить с цитированием
Старый 11.07.2015, 20:08   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
(foo += func rever (
 (if (foo.i > 10) ( 
     (n += (foo.i mod 10))
     (n *= 10)
     (call foo.rever  i=(foo.i div 10))
 ) (n + foo.i) )
))
(write (call foo.rever  i=835))
Результат:
Изображения
Тип файла: jpg Безымянный.jpg (15.0 Кб, 139 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2015, 20:17   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

при переводе в строку удобнее будет. как вариант можно так.
Код:
function r(i: integer): integer;
begin
  if i > 9 then result := trunc(power(10, trunc(log10(i))))*(i mod 10)+r(i div 10)
  else result := i;
end;
trunc(power(10, trunc(log10(i)))) можно упростить если надо
eoln вне форума Ответить с цитированием
Старый 11.07.2015, 20:26   #5
leonidzilb
Новичок
Джуниор
 
Регистрация: 11.07.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Друже, язык какой?
какая разница мне важна идея а программу написать не проблемма
leonidzilb вне форума Ответить с цитированием
Старый 11.07.2015, 20:46   #6
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от leonidzilb Посмотреть сообщение
какая разница мне важна идея а программу написать не проблемма
Число в рекурсию должно поступать в виде числа или строки? Если не в виде строки, то какое число (целочисленное/дробное, со знаком/без)?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 11.07.2015 в 20:52.
Krasiosoft вне форума Ответить с цитированием
Старый 11.07.2015, 20:52   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
trunc(power(10, trunc(log10(i))))
Ай да хитрец )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2015, 22:19   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от leonidzilb Посмотреть сообщение
мне важна идея
В рекурсию можно передавать 2 параметра. Допустим, первый параметр - само число, которое мы делим на 10 каждый раз, а второй - это преобразованное число, которое мы будем каждый раз умножать на 10. Будет что-то похожее на обычное преобразование в цикле:
Код:
int reverseNumber(int number, int resultNumber = 0){
    if(number == 0) return resultNumber;
    else return r(number/10 ,resultNumber*10 + number%10);
}
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 11.07.2015 в 22:24.
Krasiosoft вне форума Ответить с цитированием
Старый 12.07.2015, 05:18   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию



Чтоб исключить 2-й параметр из рекурсии, надо его вычислять.
Не для копипасты, очень криво, ахтунг! писал левой пяткой и под ганджубасом.
Код:
function RevertR(X: DWORD): DWORD;
var
  Coef: DWORD;
begin
  if X > 9
    then begin
           Result:= RevertR(X div 10);
           Coef:= 1;
           while Coef < X do Coef:= Coef * 10;
           Result:= Result + (X mod 10) * (Coef div 10); // оторвите мне руки за такой код!
         end
   else Result:= X;
end;
Допилите кто-нить, а то криво пипец и спать охота ужос как.

Но, блин, как-то она, зараза, работает!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.07.2015, 08:03   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
оторвите мне руки за такой код!
Нормальный код. Я ведь тоже так же предложил, только без локальных переменок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия определение простого числа ujif Помощь студентам 12 05.12.2014 12:21
рекурсия квадрат числа ujif Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2013 10:24
переворот числа (Delphi) mavar Помощь студентам 2 03.05.2011 22:00
переворот числа! помогите плиззз Devil Помощь студентам 5 03.04.2007 19:16