回 帖 发 新 帖 刷新版面

主题:大家看看,我的程序为什么错了

题目:
输入一个整数N(1<=N<=1000),求出所有N位数中含有偶数个3(包括0个3)的数的个数。如果结果大于12345,只需要输出结果除以12345的余数。如输入2,输出73;输入3,输出674。

我的程序,输入823以下的数(包括823)时能输出正确结果,但是输入超过823的数就提示溢出,不知道是怎么搞的。
程序:
DECLARE FUNCTION jc# (k!)
DECLARE FUNCTION cf# (a!, b!)
CLS
DIM s1 AS LONG, s2 AS LONG, v AS DOUBLE
INPUT n
tm = TIMER
IF n < 1 OR n > 1000 OR n <> INT(n) THEN PRINT "Error!": END
IF n = 1 THEN PRINT 9: END
FOR t = 1 TO n STEP 2
    IF n = t + 1 OR n = t THEN
       IF n = t + 1 THEN v = v + 9 * n - 1 ELSE v = v + 1
    ELSE
       s1 = jc(n - 1) / jc(n - t) / jc(t - 1) * cf(9, n - t)
       s2 = jc(n - 1) / jc(n - t - 1) / jc(t) * 8 * cf(9, n - t - 1)
       v = v + s1 + s2
    END IF
    v = v MOD 12345
NEXT t
ss = 9
FOR i = 1 TO n - 1
    ss = ss * 10
    ss = ss MOD 12345
NEXT i
PRINT TIMER - tm
IF ss < v THEN PRINT ss - v + 12345 ELSE PRINT ss - v
END

FUNCTION cf# (a, b)
DIM s AS DOUBLE
s = 1
FOR i = 1 TO b
    s = s * a
    s = s MOD 12345
NEXT i
cf# = s
END FUNCTION

FUNCTION jc# (k)
DIM s AS DOUBLE
s = 1
FOR i = 1 TO k
    s = s * i
    s = s MOD 12345
NEXT i
jc# = s
END FUNCTION

请大家帮我查一下错在哪里。谢谢。

回复列表 (共1个回复)

沙发

我运行过一次,在这一行出错
       s1 = jc(n - 1) / jc(n - t) / jc(t - 1) * cf(9, n - t)
然后我检查一个式子的各个值
jc(n-1)=0
jc(n-t)=0   [color=ff00ff]除数为零,于是溢出了[/color]
jc(t-1)=1
cf(9,n-t)=81
再追查一下jc( )函数,结果发现,jc(823)=0,
也就是说之后的所有函数值,都是12345的倍数,当然就全部溢出了。

以上只是帮你调试一下,对你的题目表示不可思议。

我来回复

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