回 帖 发 新 帖 刷新版面

主题:急解

2^100是一个很大的数,计算机无法直接计算出来,编程求该式的准确结果(从最高位到最低位第一位都要打印出来)
用高精度解加10分,其余加30分

回复列表 (共4个回复)

沙发

错了,用高精度应该加30分.
CLS
n = 2: m = 100
DIM a(n), b(n), s(n)
l$ = "1"
FOR i = 1 TO m
    ERASE a, b, s: a$ = l$: b$ = "2": GOSUB gjdmult: l$ = ""
    FOR j = ls TO 1 STEP -1
        l$ = l$ + RTRIM$(LTRIM$(STR$(s(j))))
    NEXT j
NEXT i
PRINT "2^100"; "="; l$
END
gjdmult: la = LEN(a$): lb = LEN(b$): DIM a(la), b(lb), s(la + lb)
FOR k = 1 TO la: a(k) = VAL(MID$(a$, la + 1 - k, 1)): NEXT k
FOR k = 1 TO lb: b(k) = VAL(MID$(b$, lb + 1 - k, 1)): NEXT k
FOR k = 1 TO la: FOR l = 1 TO lb
    d = a(k) * b(l): v = k + l - 1
    s(v) = s(v) + d MOD 10
    s(v + 1) = s(v + 1) + s(v) \ 10 + d \ 10
    s(v) = s(v) MOD 10
NEXT l, k
IF s(la + lb) = 0 THEN ls = la + lb - 1 ELSE ls = la + lb
RETURN
运行结果:
1267650600228229401496703205376

板凳

我想,除了高精度,应该有更简单的方法!

3 楼

s$ = "1"
FOR i = 1 TO 1000
    s2 s$
    PRINT i, s$
NEXT
PRINT s$

SUB s2 (s$)
s$ = " " + LTRIM$(RTRIM$(s$))
FOR i% = LEN(s$) TO 2 STEP -1
    v% = 2 * VAL(MID$(s$, i%, 1)) + v%
    MID$(s$, i%, 1) = CHR$(48 + (v% MOD 10))
    v% = v% \ 10
NEXT
IF v% > 0 THEN MID$(s$, i%, 1) = CHR$(48 + (v% MOD 10))
s$ = LTRIM$(RTRIM$(s$))
END SUB


 100          1267650600228229401496703205376

4 楼

二进制
1后面100个零

我来回复

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