Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.25 KB | None | 0 0
  1. let digPow (n: int) (p: int) =
  2.     // вычисляю длину
  3.     let len =
  4.         sprintf "%d" n
  5.         |> Seq.length
  6.     // helper-функция, без неё функция ниже не компилилась))
  7.     let add (lst:list<int>) num =
  8.         (num%10)::lst
  9.     // получаю список цифр из данного числа
  10.     let rec getList (num:int) (lst:list<int>) ln =
  11.         if ln = 0 then lst
  12.         else getList (num/10) (add lst num) (ln-1)
  13.     // вычисляю функцию выше
  14.     let tmpList = getList n [] len
  15.     // из полученного списка делаю список соответствующих степеней
  16.     let prepared :list<float>=
  17.         tmpList
  18.         |> List.map2 (fun i x ->((float x)**float (pp+i))) [0..len-1]
  19.     // вычисляю сумму чисел списка выше
  20.     let preRes =
  21.         prepared
  22.         |> List.fold (fun acc dig -> acc+(int dig)) 0
  23.     // если нет остатка, то возвращаю результат, делённый на n, чтобы получить k, в соответствии с заданием, если остаток есть - код ошибки (-1)
  24.     if preRes % n = 0 then preRes / n else -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement