にっき
2007/12/06 18:48:38
分数の割り算
むうみんがそ〜しゃるぶっくま〜くは使ってないのもあってどこのをぺったんしようか迷ってたけど
AddClips ってまとめてくれるとこを発見したからさくっとぺったん☆
・・・ってこんなにもあるのにう?(´ω`;【みかん
こまかいとこは AddClips のなかのひとにおまかせするってことで☆
今日も Lua でお題をくりあしてくにう☆ヾ(・x・。【みかん
分数を少数に分解
循環小数なんてき〜わ〜ど見るのすてきにおひさしぶりだにゃぁ・・・ (´ω`;【みかん
お題では a < b でおっけぃになってたけど a > b でもだいじょ〜ぶなようにこんなかんじかなぁ?
おまけでつけた整数部分は普通に割り算して小数部分を切り捨てちゃえばおっけぃ☆
本題の小数部分は筆算するときの手順をそのままぷろぐらむに☆
たとえば 3 / 14 だと
みたいにあまりを10倍しながら割り算して,あまりにおんなじ値が出てくると
そこから循環しちゃうからそれをる〜ぷの終了条件にしてるだけかなぁ?
引数にaとbを指定して実行すると
こんなかんじでだいじょ〜ぶ・・・だよね?(´ω`;【みかん
AddClips ってまとめてくれるとこを発見したからさくっとぺったん☆
・・・ってこんなにもあるのにう?(´ω`;【みかん
こまかいとこは AddClips のなかのひとにおまかせするってことで☆
今日も Lua でお題をくりあしてくにう☆ヾ(・x・。【みかん
分数を少数に分解
循環小数なんてき〜わ〜ど見るのすてきにおひさしぶりだにゃぁ・・・ (´ω`;【みかん
function decimal(a,b)
local ret = {};
local loop = {};
if a >= b then
table.insert(ret,math.floor(a / b) .. [[.]]);
a = a - ret[1] * b;
else
table.insert(ret,[[0.]]);
end
while a ~= 0 do
loop[a] = table.getn(ret) + 1;
a = a * 10;
table.insert(ret,math.floor(a / b));
a = math.mod(a,b);
if loop[a] ~= nil then
ret[loop[a]] = [[{]] .. ret[loop[a]];
table.insert(ret,[[}]]);
break;
end
end
return table.concat(ret);
end
print(decimal(arg[1],arg[2]));
お題では a < b でおっけぃになってたけど a > b でもだいじょ〜ぶなようにこんなかんじかなぁ?
おまけでつけた整数部分は普通に割り算して小数部分を切り捨てちゃえばおっけぃ☆
本題の小数部分は筆算するときの手順をそのままぷろぐらむに☆
たとえば 3 / 14 だと
.21428571...
14 ) 3
----
30
28
----
20
14
----
60
56
----
40
28
----
120
112
----
80
70
----
100
98
----
20
14
----
6
みたいにあまりを10倍しながら割り算して,あまりにおんなじ値が出てくると
そこから循環しちゃうからそれをる〜ぷの終了条件にしてるだけかなぁ?
引数にaとbを指定して実行すると
>lua5.1.exe 009-decimal.lua 3 8
0.375
>lua5.1.exe 009-decimal.lua 3 14
0.2{142857}
>lua5.1.exe 009-decimal.lua 297 14
21.2{142857}
こんなかんじでだいじょ〜ぶ・・・だよね?(´ω`;【みかん
こめんと
投稿された内容の著作権はこめんとの投稿者に帰属するっぽいです☆また,現在 IE6 以下で Sleipnir,Lunascape,Donut じゃないゆ〜ざえ〜じぇんとからの描き込みを制限してますです☆
該当しちゃうかたはてきとうにゆ〜ざえ〜じぇんとを偽装しちゃってくださいです(´ω`;【みかん