- 締切済み
分数の加算
1 1 5 ― + ― = ― 2 3 6 という式をJavaScriptで任意の数についてするにはどう書けばよいのでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Werner
- ベストアンサー率53% (395/735)
1. 足す数同士を通分 (分母が通分前の最小公倍数になるようにしても良いし、 後で約分するので単に互いの分母同士をかけたのでも良い。) 2. 分子同士を足し算 3. 既約分数になるように約分 約分は分母と分子をその最小公約数で割ればよいです。 面白そうだったのでコードも書いてみました。 (自分で作りたければ無視してください。) ------------------------------------------------------- //分数オブジェクト //n:numerator(分子), d:denominator(分母) var a={"n":1 , "d":2}; var b={"n":1 , "d":3}; var result = add_frac(a,b); alert(frac2str(a)+"+"+frac2str(b)+"="+frac2str(result)); function add_frac(a,b){ var r={"n":0 , "d":0} //通分後の分母 r.d = lcm(a.d,b.d); //通分後の分子同士の加算 r.n = a.n*r.d/a.d + b.n*r.d/b.d //約分 var temp = gcd(r.d,r.n); r.d /= temp; r.n /= temp; return r; } function frac2str(a){ return a.n+"/"+a.d; } //mとnの最大公約数を返す(ユークリッドの互除法) function gcd(m,n){ var temp; if(m<n){ temp=m; m=n; n=temp; } if(n<=0){return m;} while(1){ temp = m%n; if(temp==0){return n;} m=n; n=temp; } } //mとnの最小公倍数を返す function lcm(m,n){ return m*n/gcd(m,n); }