代码见下:
OPTION BASE 1
DIM buff(16000) AS LONG
PRINT "calc n!"
INPUT "n="; nn%
rad& = 10000
arrLen% = 1
buff(1) = 1
FOR i% = 1 TO nn% STEP 1
cc& = 0
FOR j% = 1 TO arrLen% STEP 1
tt& = buff(j%) * i% + cc&
buff(j%) = tt& MOD rad&
cc& = tt& \ rad&
NEXT
IF (cc& > 0) THEN
arrLen% = arrLen% + 1
buff(arrLen%) = cc&
END IF
NEXT
PRINT "n!="; LTRIM$(RTRIM$(STR$(buff(arrLen%))));
FOR i% = arrLen% - 1 TO 1 STEP -1
s$ = LTRIM$(RTRIM$(STR$(buff(i%))))
len1% = LEN(s$)
IF (len1% < 4) THEN
PRINT STRING$(4 - len1%, "0");
END IF
PRINT s$;
NEXT
说明:
1. 该程序在qbasic 下编译通过。
qbasic 可从 http://xiazai.zol.com.cn/detail/14/132311.shtml 下载
QBasic的学习,可参考http://www.zz5z.net/qb/index.htm
2. Qbasic是16位dos程序,数组的大小不能超过64k,故定义数组 buff(16000)。16000×4 <64K
3. 对bas程序的说明,免得时间长了忘记其语法。
3.1 变量名称后缀的含义
%:整数,2bytes, &:长整数,4bytes, $:字符串。
3.2 数组使用 (), 而不用中括号
3.3 运算符:mod 求余, "/" 整除
3.4 Input 输入,第一个字符串表示提示信息
3.5 Print 输出,”:”分割表示紧凑格式输出,“,”最各个字段的分隔符,松散格式输出
3.6 函数,字符串函数以$结尾,
STRING$, 重复多次字符串
LTRIM$,RTIRM$: 除去前导/尾随空格
STR$: 数值转换为字符串
4 性能比较:和Dos批处理和Linux Bash相比,虽然同是解释性语言,但在qbasic 运行比dos批处理和Linux bash快得多