PHP-82文字(バギー)
$i=fgets(STDIN);$j=fgets(STDIN);$k=1;while(($a=$j*$k)<$i)$k++;echo($a>$i?--$k:$k);
しかし、これは非常に簡単な解決策です-分数や異なる記号を処理しません(無限ループにジャンプします)。これについては詳しく説明しませんが、かなり簡単です。
入力は改行で区切られた標準入力です。
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;
前のものと同じ入出力。
はい、これは以前のサイズのほぼ2倍ですが、次のとおりです。
- 分数を正しく処理します
- 標識を正しく処理する
- 2番目のパラメーターが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
も入力を許可?すなわち、コンマ区切り?