このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1255277760/449
#  なんか布団の中で思いついた問題 
#   
#  1. 0から9999までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け 
#   例) 0→ぜろ 4→よん 14→じゅうよん 87→はちじゅうなな 801→はっぴゃくいち 7974→ななせんきゅうひゃくななじゅうよん 
#   
#  2. 0から99999999(9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け 
#   例)88880007→はっせんはっぴゃくはちじゅうはちまんなな 
#   
#  3. 0から9999999999999999(9999兆9999億9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け 
#   例)8000800080008→はっちょうはちおくはちまんはち 
#   
#  4. 上記3において、入力が3の倍数もしくは3がつく数字であるときにはその数字を英語で出力せよ 
# 
# 

'0から99999999(9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け'(0,れい) :- !.
'0から99999999(9999万9999)までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け'(N,ひらがな) :-
        N_1 is N // 10000,
        M is N mod 10000,
        '0から9999までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け'(M,_一万の桁以上のひらがな表現),
        '0から9999までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け'(M,_千の桁以下のひらがな表現),
        atomic_list_concat([_一万の桁以上のひらがな表現,まん,_千の桁以下のひらがな表現],_ひらがな).

'0から9999までの整数を入力として受け取り、それをひらがなで出力するプログラムを書け'(_0から9999までの整数,_整数のひらがな表現) :-
        千の桁のひらがな(_0から9999までの整数,_百以下の桁の整数,_千の桁のひらがな),
        百の桁のひらがな(_百以下の桁の整数,_十以下の桁の整数,_百の桁のひらがな),
        十の桁のひらがな(_十以下の桁の整数,_十の桁のひらがな,_一の桁のひらがな),
        atomic_list_concat([_千の桁のひらがな,_百の桁のひらがな,_十の桁のひらがな,_一の桁のひらがな],_整数のひらがな表現).

千の桁のひらがな(N,N,'') :-
        N < 1000.
千の桁のひらがな(N,_百以下の桁の整数,_ひらがな) :-
        _千の桁の整数 is N // 1000,
        数字のひらがな(_千の桁の整数,せん,_ひらがな),
        _百以下の桁の整数 is N mod 1000.

百の桁のひらがな(N,N,'') :-
        N < 1000,!.
百の桁のひらがな(N,_十以下の桁の整数,_ひらがな) :-
        _百の桁の整数 is N // 100,
        数字のひらがな(_百の桁の整数,せん,_ひらがな),
        _十以下の桁の整数 is N mod 100.

十の桁のひらがな(N,'',_一の桁のひらがな) :-
        数字のひらがな(_一の桁の整数,いち,_一の桁のひらがな).
十の桁のひらがな(N,_十の桁のひらがな,_一の桁のひらがな) :-
        _十の桁の整数 is N // 10,
        数字のひらがな(_十の桁の整数,じゅう,_十の桁のひらがな),
        _一の桁の整数 is N mod 10,
        数字のひらがな(_一の桁の整数,いち,_一の桁のひらがな).

数字のひらがな(0,_,'') :- !.
数字のひらがな(1,せん,せん) :- !.
数字のひらがな(1,ひゃく,ひゃく) :- !.
数字のひらがな(1,じゅう,じゅう) :- !.
数字のひらがな(1,いち,いち) :- !.
数字のひらがな(3,せん,さんぜん) :- !.
数字のひらがな(3,ひゃく,さんびゃく) :- !.
数字のひらがな(6,ひゃく,ろっぴゃく) :- !.
数字のひらがな(8,ひゃく,はっぴゃく) :- !.
数字のひらがな(8,せん,はっせん) :- !.
数字のひらがな(_二より大きい数,_桁のひらがな,_ひらがな) :-
        二より大きい数のひらがな(_二より大きい数,_二より大きい数のひらがな),
        atomic_list_concat([_により大きい数のひらがな,_桁のひらがな],_ひらがな).
二より大きい数のひらがな(2,に).
二より大きい数のひらがな(3,さん).
二より大きい数のひらがな(4,よん).
二より大きい数のひらがな(5,ご).
二より大きい数のひらがな(6,ろく).
二より大きい数のひらがな(7,なな).
二より大きい数のひらがな(8,はち).
二より大きい数のひらがな(9,きゅう).