PHP-82 자 (버기)
$i=fgets(STDIN);$j=fgets(STDIN);$k=1;while(($a=$j*$k)<$i)$k++;echo($a>$i?--$k:$k);
그러나 이것은 매우 간단한 해결책입니다-분수 또는 다른 부호를 처리하지 않습니다 (무한 루프로 뛰어들 것입니다). 나는 이것에 대해 자세히 설명하지 않을 것입니다. 그것은 매우 간단합니다.
입력이 stdin에 있으며 새 줄로 구분됩니다.
PHP-141 자 (전체)
$i*=$r=($i=fgets(STDIN))<0?-1:1;$j*=$s=($j=fgets(STDIN))<0?-1:1;$k=0;$l=1;while(($a=$j*$k)!=$i){if($a>$i)$k-=($l>>=2)*2;$k+=$l;}echo$k*$r*$s;
입력과 출력은 이전과 동일합니다.
예, 이것은 이전 크기의 거의 두 배 크기이지만 다음과 같습니다.
- 분수를 올바르게 처리
- 표지판을 올바르게 처리
- 무한 루프로 들어 가지 않습니다. 두 번째 매개 변수가 0이 아니라면 0으로 나눕니다-유효하지 않은 입력
재 포맷과 설명 :
$i *= $r = ($i = fgets(STDIN)) < 0 ? -1 : 1;
$j *= $s = ($j = fgets(STDIN)) < 0 ? -1 : 1;
// First, in the parentheses, $i is set to
// GET variable i, then $r is set to -1 or
// 1, depending whether $i is negative or
// not - finally, $i multiplied by $r ef-
// fectively resulting in $i being the ab-
// solute value of itself, but keeping the
// sign in $r.
// The same is then done to $j, the sign
// is kept in $s.
$k = 0; // $k will be the result in the end.
$l = 1; // $l is used in the loop - it is added to
// $k as long as $j*$k (the divisor times
// the result so far) is less than $i (the
// divided number).
while(($a = $j * $k) != $i){ // Main loop - it is executed until $j*$k
// equals $i - that is, until a result is
// found. Because a/b=c, c*b=a.
// At the same time, $a is set to $j*$k,
// to conserve space and time.
if($a > $i) // If $a is greater than $i, last step
$k -= ($l >>= 2) * 2; // (add $l) is undone by subtracting $l
// from $k, and then dividing $l by two
// (by a bitwise right shift by 1) for
// handling fractional results.
// It might seem that using ($l>>=2)*2 here
// is unnecessary - but by compressing the
// two commands ($k-=$l and $l>>=2) into 1
// means that curly braces are not needed:
//
// if($a>$i)$k-=($l>>=2)*2;
//
// vs.
//
// if($a>$i){$k-=$l;$l>>=2;}
$k += $l; // Finally, $k is incremented by $l and
// the while loop loops again.
}
echo $k * $r * $s; // To get the correct result, $k has to be
// multiplied by $r and $s, keeping signs
// that were removed in the beginning.
740,2
입력에 대해서도 허용? 즉 쉼표로 분리 되었습니까?