(use 'clojure.string)
(defn f [n]
  (let [s (str n)
        i (map (fn [x] (- (int x) 48)) (str(Math/abs n)))]
    (+
      (reduce + (cons (* (first i) (if (< n 0) -1 1)) (rest i)))
      n
      (count s))))
(defn g [n]
  (let [s (str (Math/abs n))
        c (count (str n))
        digits-str (str (if (< n 0) "-" "") (join "+" s))
        ints (map (fn [x] (- (int x) 48)) s)
        digits (cons (* (first ints) (if (< n 0) -1 1)) (rest ints))
        sum (reduce + digits)]
    (str n "+" c "+(" digits-str ")=" (+ sum c n))))

(println (f 99))
(println (f -123))
(println (f 0))
(println (f 1))
(println (g 99))
(println (g -123))
(println (g 0))
(println (g 1))