Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defn parse-int [s]
- (Integer. (re-find #"\d+" s )))
- (defn mult [x y]
- "Умножение в столбик двух чисел в виде строки"
- (let [x (map #(parse-int (str %)) (reverse x))
- y (map #(parse-int (str %)) (reverse y))
- summarize-it (atom [])]
- (loop [current-multiplier (last x)]
- (when (not= current-multiplier nil)
- (swap! summarize-it
- (into @summarize-it
- (reduce
- (fn [coll-sum unit-of-y]
- (let [leftover (atom 0)
- multiple (fn [multiplier left] (+ (* unit-of-y multiplier) left))]
- (swap! leftover (quot (multiple unit-of-y @leftover) 10))
- (if (= unit-of-y (last y))
- (do
- (into coll-sum (rem (multiple unit-of-y @leftover) 10))
- (into coll-sum (quot (multiple unit-of-y @leftover) 10)))
- (into coll-sum (rem (multiple unit-of-y @leftover) 10))))
- ) [] y)))
- (recur (drop-last x))))))
- (mult "547" "83")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement