Hatena::ブログ(Diary)

みずぴー日記 Twitter

2010-06-27(日)

-3進数への変換

| -3進数への変換を含むブックマーク

30分プログラム、その776。anarchy golf - Negatenaryインスパイアされて、-3進数への変換をやってみました。

基数が負の変換はやったことがなかったので、わりと苦戦しました。各桁が必ず正の数になるようにするのがむずい!

使い方

*Main> negatenary (-60)
"2020"

ソースコード

negatenary :: Integral a =>  a ->  String

negQuotRem x y =
    let (q,r) = x `quotRem`  y
    in if r < 0 then
           (q+1, r-y)
       else
           (q,r)

negatenary 0 = ""
negatenary n = negatenary q ++ show r
    where (q,r) = n `negQuotRem` (-3)

main = mapM_ (putStrLn.negatenary)  [-60..182]

参考

トラックバック - http://d.hatena.ne.jp/mzp/20100627/negateary
Connection: close