php 분수 더하기 분수 표현
본문
1/6 + 2/10 = 11/30
처럼 분수 더하기 분수를 분수로 표현하고 싶습니다.
이때, 숫자를 랜덤으로 발생하여 $a/$b + $c/$d 형식에서
$a=mt_rand(1,9);
$b=mt_rand(1,9);
$c=mt_rand(1,9);
$d=mt_rand(1,9);
$a/$b + $c/$d = e/f
로 표현 할 때 분모가 분수보다 작게 표현 하였으면 합니다.
답변 3
최대공약수, 최소공배수
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=13184
<?php
$a=mt_rand(1,9);
$b=mt_rand(1,9);
$c=mt_rand(1,9);
$d=mt_rand(1,9);
$e = min(array($a,$b));
$f = max(array($a,$b));
$g = min(array($c,$d));
$h = max(array($c,$d));
echo $a.' '.$b.' '.$c.' '.$d.'<br>';
echo $e.' '.$f.' '.$g.' '.$h.'<br>';
// 최대공약수
function gcd($a, $b) {
return ($b) ? gcd($b,$a%$b) : $a;
}
// 최소공배수
function lcm($a, $b) {
return $a * $b / gcd($a, $b);
}
$x = lcm($f, $h);
echo 'lcm: '.$x.'<br><br>';
$i = $e * ($x/$f);
$j = $g * ($x/$h);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($i + $j) . '/' . $x .'<br>';
$k = floor(($i + $j) / $x);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($k ? $k.' & ' : '') . (($i + $j) % $x) . '/' . $x . '<br>';
7 5 8 4
5 7 4 8 // 큰 수를 분모로
lcm: 56 // 7과 8의 최소공배수
40/56 + 28/56 = 68/56 // 분자에 최소공배수를 곱해주고 분모는 최소공배수
40/56 + 28/56 = 1 & 12/56
68/56 약분을 해야하는데...
분자와 분모의 최대공약수로 나누면 되겠죠?
gcd(68,56) = 4
!-->!-->($a>$b ? $a/$b : $b/$a) + ($c>$d ? $c/$d : $d/$c)
분수 표현은 쉬운 작업이 아닙니다.
https://github.com/markrogoyski/math-php/blob/master/src/Number/Rational.php
https://rosettacode.org/wiki/Convert_decimal_number_to_rational#PHP
참고하세요.
답변을 작성하시기 전에 로그인 해주세요.