回 帖 发 新 帖 刷新版面

主题:排列数

输入M,N,输出P(M,N)(高精度)

回复列表 (共3个回复)

沙发

CLS
INPUT "M,N=",M,N
DIM A(100)
A(1)=1
FOR I = M TO M - N + 1 STEP -1
  G = 0
  FOR J = 1 TO 100
    A(J) = A(J) * I + G            
    G = A(J) \ 10            
    A(J) = A(J) MOD 10
  NEXT J
NEXT I
H=100
DO WHILE A(H) = 0
  H = H - 1
LOOP
FOR I = H TO 1 STEP -1
  PRINT USING "#";A(I);
NEXT I
END

板凳

其实题目远没有你想象的那么麻烦,既然是高精度就是高精度乘法。
排列公式:
P(m, n) = m * (m - 1) * (m - 2) * … * (m - n + 1)            {m > n}

3 楼

DECLARE FUNCTION gjdmult$ (a$, b$)
CLS
INPUT m, n
IF m < n THEN SWAP m, n
l$ = "1": x$ = ""
FOR i = m TO m - n + 1 STEP -1
    x$ = LTRIM$(STR$(i))
    l$ = gjdmult$(l$, x$)
NEXT i
PRINT l$
END

FUNCTION gjdmult$ (a$, b$)
la = LEN(a$): lb = LEN(b$)
DIM a(la), b(lb), s(la + lb)
FOR i = 1 TO la: a(i) = VAL(MID$(a$, la + 1 - i, 1)): NEXT i
FOR i = 1 TO lb: b(i) = VAL(MID$(b$, lb + 1 - i, 1)): NEXT i
FOR i = 1 TO la: FOR j = 1 TO lb
    d = a(i) * b(j): v = i + j - 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 j, i
c$ = ""
IF s(la + lb) = 0 THEN ls = la + lb - 1 ELSE ls = la + lb
FOR i = ls TO 1 STEP -1
    c$ = c$ + RTRIM$(LTRIM$(STR$(s(i))))
NEXT i
gjdmult = c$
END FUNCTION

我来回复

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