PHPアルゴリズム 分数の計算についての質問です。
以下の問題において計算の答えが違うのでご教授頂きたいです。
問題文
// calcFraction関数内に分子と分母を渡すと、分数の答えを返すプログラムを記載してください。
// 例えば
// 1/10 + 5/6 の場合、答えは 14/15
// 1/7 + 4/9 の場合、答えは 37/63
// 1/50 + 1/100 の場合、答えは 3/100
// となります。
// また通分には最小公約数を求める関数gcd、約分には最大公約数を求める関数lcm をそれぞれ利用してください。
$num1 = 1; // 分子 $deno1 = 10; // 分母 $num2 = 5; // 分子 $deno2 = 6; // 分母 function calcFraction($num1, $deno1, $num2, $deno2) { $num = ($num1 * $num2) + ($num2 * $deno1); $deno = $deno1 * $deno2; $gcd = gcd($num,$deno); return[$num / $gcd , $deno / $gcd]; } // 最大公約数 function gcd($m, $n){ if($n > $m) list($m, $n) = array($n, $m); while($n !== 0) { $tmp_n = $n; $n = $m % $n; $m = $tmp_n; } return $m; } // 最小公倍数 function lcm($m, $n){ return $m * $n / gcd($m, $n); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>分数の足し算プログラム</title> </head> <body> <section> <p><?php echo $num1 ."/". $deno1 ." + ". $num2 ."/". $deno2 ?></p> <p>答えは<?php vprintf('%d / %d', calcFraction($num1, $deno1, $num2, $deno2)); ?>です</p> </section> </body> </html>
出力結果
1/10 + 5/6 答えは11 / 12です
そもそも計算においての書き方が違うのでしょうか。
解説もして頂けると嬉しいです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー