테스트 사이트 - 개발 중인 베타 버전입니다

php 분수 더하기 분수 표현 채택완료

찬돌이 4년 전 조회 2,186

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개

채택된 답변
+20 포인트
Big1
4년 전

최대공약수, 최소공배수

https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=13184

 

</p>

<p><?php

$a=mt_rand(1,9);

$b=mt_rand(1,9);

$c=mt_rand(1,9);

$d=mt_rand(1,9);</p>

<p>$e = min(array($a,$b));

$f = max(array($a,$b));

$g = min(array($c,$d));

$h = max(array($c,$d));</p>

<p>echo $a.' '.$b.' '.$c.' '.$d.'
';

echo $e.' '.$f.' '.$g.' '.$h.'
';</p>

<p>// 최대공약수

function gcd($a, $b) {

    return ($b) ? gcd($b,$a%$b) : $a;

}

// 최소공배수

function lcm($a, $b) {

    return $a * $b / gcd($a, $b);

}</p>

<p>$x = lcm($f, $h);

echo 'lcm: '.$x.'

';</p>

<p>$i = $e * ($x/$f);

$j = $g * ($x/$h);

echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($i + $j) . '/' . $x .'
';</p>

<p>$k = floor(($i + $j) / $x);

echo  $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($k ? $k.' &amp; ' : '') . (($i + $j) % $x) . '/' . $x . '
';

 

</p>

<p>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</p>

<p>

 

68/56 약분을 해야하는데...

분자와 분모의 최대공약수로 나누면 되겠죠?

gcd(68,56) = 4

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

찬돌이
4년 전
너무 감사드립니다.
더 부탁드려도 될 까요
분자와 분모 같은 숫자 일 경우에는 mt_rand() 다시 발생하여
다른 숫자일 경우에만 처리 했으면 합니다.

댓글을 작성하려면 로그인이 필요합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

($a>$b ? $a/$b : $b/$a) + ($c>$d ? $c/$d : $d/$c)

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

찬돌이
4년 전
빠른 답변 감사드립니다.
결과 값이 소수로 표현이 되고 있습니다.
결과 값을 분수로 표현 할 수 는 없나요?

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인