Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

算出有理数的第i位小数---float_num谓词

浏览上一个主题 浏览下一个主题 向下  留言 [第1页/共1页]

1 算出有理数的第i位小数---float_num谓词 于 周三 三月 28, 2012 3:03 pm

float_num(+Dividend, +Divisor, +Digit, -Num)

传回Dividend除以Divisor的第Digit位小数Num


代码:
float_num(Dividend,Divisor,Digit,Num) :- X is Dividend mod Divisor, loop(X,Divisor,Digit,Num).

loop(Dividend,Divisor,Digit,Num) :- next_number(Dividend,Divisor,N,R), C is Digit -1, (C = 0 ->  Num = N ; loop(R,Divisor,C,Num)) .

next_number(N1,N2,Num,Remain) :-
  N3 is N1 * 10, (N3 =< N2 -> Num =0, Remain = N3 ; Num is floor(N3/N2), Remain is N3 - Num * N2).



例:

?- float_num(1,7,1000009,Num).
传回 Num = 1.

?- float_num(1,7,1000010,Num).
传回 Num = 4.

?- float_num(1,7,1000011,Num).
传回 Num = 2.

?- float_num(1,7,1000012,Num).
传回 Num = 8.

?- float_num(1,7,1000013,Num).
传回 Num = 5.

?- float_num(1,7,1000014,Num).
传回 Num = 7.

?- float_num(4,5,10,Num).
传回 Num = 0.

查阅用户资料 http://prolog.longluntan.net

浏览上一个主题 浏览下一个主题 返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题