Knight, 25 bytes
;=x+=y 1P;W=x-x 1=y*x yOy
Ungolfed:
; = x + x = sum of:
= y 1 y = 1 (passes through 1) and
PROMPT a line from stdin (coerced to number)
; WHILE = x - x 1 while (x = x - 1) is nonzero:
= y * x y y = x * y
OUTPUT y print y
In Knight, coercion depends on the type of the first argument. So 1+"5"
is 6 while "5"+1
is "51"
.