LINUX.ORG.RU

История изменений

Исправление unikoid, (текущая версия) :

Ну смотри, как я понимаю, тебе для множества целых чисел.
Тогда написать это можно как-то так:

(define (swap n)
  (if (< (abs n) 10) n
      (+ (* (remainder n 10) (expt 10 (floor (log10 (abs n))))) 
         (swap (quotient n 10)))))

Соответственно, эту функцию можно описать как:
f(n) = n; |n| < 10,
f(n) = (n%10)*(10^floor(log10(|n|))) + f(n/10)

при условии, что у нас % - остаток от целочисленного деления, floor - отбрасывает дробную часть, log10 - десятичный логарифм и / - целочисленное деление.

Возможно, можно и для вещественных обобщить, лень думать сейчас.

Исходная версия unikoid, :

Ну смотри, как я понимаю, тебе для множества целых чисел.
Тогда написать это можно как-то так:

(define (swap n)
  (if (< (abs n) 10) n
      (+ (* (remainder n 10) (expt 10 (floor (log10 (abs n))))) 
         (swap (quotient n 10)))))

Соответственно, эту функцию можно описать как:
f(n) = n; |n| < 10,
f(n) = (n%10)*(10^floor(log10(|n|))) + f(n/10)

при условии, что у нас % - остаток от целочисленного деления, floor - округление, log10 - десятичный логарифм и / - целочисленное деление.

Возможно, можно и для вещественных обобщить, лень думать сейчас.