Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let digPow (n: int) (p: int) =
- // вычисляю длину
- let len =
- sprintf "%d" n
- |> Seq.length
- // helper-функция, без неё функция ниже не компилилась))
- let add (lst:list<int>) num =
- (num%10)::lst
- // получаю список цифр из данного числа
- let rec getList (num:int) (lst:list<int>) ln =
- if ln = 0 then lst
- else getList (num/10) (add lst num) (ln-1)
- // вычисляю функцию выше
- let tmpList = getList n [] len
- // из полученного списка делаю список соответствующих степеней
- let prepared :list<float>=
- tmpList
- |> List.map2 (fun i x ->((float x)**float (pp+i))) [0..len-1]
- // вычисляю сумму чисел списка выше
- let preRes =
- prepared
- |> List.fold (fun acc dig -> acc+(int dig)) 0
- // если нет остатка, то возвращаю результат, делённый на n, чтобы получить k, в соответствии с заданием, если остаток есть - код ошибки (-1)
- if preRes % n = 0 then preRes / n else -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement