ari's world

あるかどうかわからないけど、あるみたい。ありがとう。

階乗(バッチ版)

階乗のテストをしていらしたので、私も階乗をバッチでやってみました。0! = 1 には対応していないですね。
もちろん「ねた*1」ですので、、、


@rem Usage factorial 1 n (example: factorial.cmd 1 6)

@setlocal enabledelayedexpansion
@if %2 leq 1 (
echo %1
) else (
set /A result = %1 * %2
set /A count = %2 - 1
call %0 !result! !count!
)

たとえば factorial.cmd という名前で保存しこんな感じで。

C:\Documents and Settings\ari>factorial.cmd 1 5
120
C:\Documents and Settings\ari>factorial.cmd 1 6
720
C:\Documents and Settings\ari>factorial.cmd 1 31
738197504 < これも間違い
しかし、32ビット版 Windows では扱う値が限られています。なんかすればいけるのかなー。

*1:ねたにもならないかな……