回 帖 发 新 帖 刷新版面

主题:阶乘

DECLARE FUNCTION js$ (n&)
DECLARE FUNCTION xxx$ (s$, i&)
DEFLNG A-Z
t1# = TIMER
PRINT js$(1000)
PRINT TIMER - t1#

FUNCTION js$ (n)
s$ = "1"
FOR i = 1 TO n
    s$ = xxx$(s$, (i))
    DO WHILE RIGHT$(s$, 1) = "0"
       k = k + 1
       s$ = LEFT$(s$, LEN(s$) - 1)
    LOOP
NEXT
js$ = s$ + STRING$(k, "0")
END FUNCTION

FUNCTION xxx$ (s$, i)
L3 = 8 - LEN(STR$(i))
p = 10 ^ L3
v = 0
FOR j = (LEN(s$) - L3 + 1) TO 1 STEP -L3
    v = VAL(MID$(s$, j, L3)) * i + v
    ss$ = RIGHT$(STR$(v), L3) + ss$
    v = v \ p
NEXT
IF j > 1 - L3 THEN v = VAL(LEFT$(s$, j + L3 - 1)) * i + v
IF v > 0 THEN ss$ = STR$(v) + ss$
xxx$ = LTRIM$(ss$)
END FUNCTION

回复列表 (共26个回复)

21 楼

如果考试,就算错了。因为一分钟的测试时间

22 楼

差别有这么巨大?用VB编译执行应该就没有这么夸张了

23 楼

VB上:
1000!花费的时间0.1秒不到
5000!花费的时间0.25秒
10000!花费的时间1秒

测试环境AMD 3000+

C++版本:
10000!花费的时间0.3秒

VB上明显没有你这么大的差别,仅仅差了3倍

24 楼

[quote]请问算10000!用多长时间?顺便说明一下测试环境[/quote]

这是第几次看到10000!已经记不清楚了

25 楼

太麻烦了!用我这个(虽然速度不够快)
DIM s AS DOUBLE
DIM n AS DOUBLE
INPUT "N = ", n
s = 1
FOR i = 1 TO n
  s = s * i
NEXT i
PRINT s
END

26 楼

????????????????????

我来回复

您尚未登录,请登录后再回复。点此登录或注册