回 帖 发 新 帖 刷新版面

主题:来就送分(2)

因一个主题每各人最多只能锝50分,所以,如果你发现你在"来就送分"帖子中有的尚未评分,请把帖子复制到这里来,继续加分!特此通知!

回复列表 (共23个回复)

沙发

这是什么意思?

板凳

详情请见"来就送分"

3 楼

阶乘
CLS
DIM a(100), b(100)
10 INPUT n
IF n > 50 THEN GOTO 10
a(1) = 1: m = 1
FOR i = 1 TO n
  FOR j = m TO 1 STEP -1
    a(j) = a(j) * i
    IF a(j) > 99 THEN
      a(j + 1) = a(j + 1) + a(j) \ 100
      a(j) = a(j) MOD 100
    END IF
  NEXT j
  IF a(m + 1) > 0 THEN m = m + 1
  FOR w = m TO 1 STEP -1
    b(w) = b(w) + a(w)
    IF b(w) > 99 THEN
      b(w + 1) = b(w + 1) + b(w) \ 100
      b(w) = b(w) MOD 100
    END IF
  NEXT w
NEXT i
x = m
FOR i = x TO 1 STEP -1
  IF b(x) > 99 THEN
    b(i + 1) = b(i) \ 100
    b(i) = b(i) MOD 100
    IF i = x THEN m = x + 1
  END IF
NEXT i
FOR i = m TO 1 STEP -1
  q$ = LTRIM$(STR$(b(i)))
  PRINT q$;
NEXT i
END


[em3][em3][em2][em1][em3][em2][em1][em2]

4 楼

再过两天就是市赛了,对于我来说,初赛没什么问题,可是复赛就有大问题了,我一定要打败:佑慧妹妹、美味的汽水!!!!!
(续:加、减、乘法的程序我已经发过了)
除法(如有循环节输出循环节,用黄色表示):
DEF fnd$ (a) = RTRIM$(LTRIM$(STR$(a)))
CLS
1 INPUT n, m
IF m = 0 THEN 1
PRINT fnd$(n); CHR$(246); fnd$(m); "=";
a = n \ m: PRINT fnd$(a);
IF n MOD m = 0 THEN END
PRINT ".";
DIM d(1000), q(1000)
q = n MOD m
DO
  i = i + 1: q = q * 10: d = q \ m: q = q MOD m: d(i) = d: q(i) = q
  IF q <> 0 THEN
     FOR j = 1 TO i - 1
         IF q(i) = q(j) AND d(i) = d(j) THEN EXIT FOR
     NEXT j
     IF j < i THEN
        FOR k = 1 TO j - 1
            PRINT fnd$(d(k));
        NEXT k
        COLOR 14
        FOR k = j TO i - 1
            PRINT fnd$(d(k));
        NEXT k
        COLOR 7: END
     END IF
  ELSE
     FOR j = 1 TO i
         PRINT fnd$(d(j));
     NEXT j
     END
  END IF
LOOP
END

5 楼

乘方:
CLS
INPUT n, m
PRINT n; "^"; m; "=";
IF m = 0 THEN PRINT 1: END
DIM a(n), b(n), s(n): l$ = "1"
FOR i = 1 TO m
    ERASE a, b, s
    a$ = l$: b$ = LTRIM$(STR$(n))
    GOSUB gjdmult
    l$ = ""
    FOR j = ls TO 1 STEP -1
        l$ = l$ + RTRIM$(LTRIM$(STR$(s(j))))
    NEXT j
NEXT i
PRINT " "; 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

6 楼

阶乘(如果输入的数过大,运行时间会很长,建议不要输超过200的数):
CLS
INPUT n
PRINT n; "!=";
DIM a(n), b(n), s(n): l$ = "1"
FOR i = 1 TO n
    ERASE a, b, s
    a$ = l$: b$ = LTRIM$(STR$(i))
    GOSUB gjdmult
    l$ = ""
    FOR j = ls TO 1 STEP -1
        l$ = l$ + RTRIM$(LTRIM$(STR$(s(j))))
    NEXT j
NEXT i
PRINT " "; 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

7 楼

还有,你会不会做今年区复赛的最后一题了?不会就看我的"快给答案"的程序.

8 楼

4楼看来真的把我当对手了呢!呵呵,市赛不比区赛难,我有信心考好的,所以,我一定要打败你,哦呵呵呵呵。楼主,我的程序有什么错误吗?为什么不加分?
谢谢7楼关心,那题我已经看过你的程序了,大概的思路我也清楚了。

9 楼

阶乘
CLS
DIM a(100), b(100)
10 INPUT n
IF n > 50 THEN GOTO 10
a(1) = 1: m = 1
FOR i = 1 TO n
  FOR j = m TO 1 STEP -1
    a(j) = a(j) * i
    IF a(j) > 99 THEN
      a(j + 1) = a(j + 1) + a(j) \ 100
      a(j) = a(j) MOD 100
    END IF
  NEXT j
  IF a(m + 1) > 0 THEN m = m + 1
  FOR w = m TO 1 STEP -1
    b(w) = b(w) + a(w)
    IF b(w) > 99 THEN
      b(w + 1) = b(w + 1) + b(w) \ 100
      b(w) = b(w) MOD 100
    END IF
  NEXT w
NEXT i
x = m
FOR i = x TO 1 STEP -1
  IF b(x) > 99 THEN
    b(i + 1) = b(i) \ 100
    b(i) = b(i) MOD 100
    IF i = x THEN m = x + 1
  END IF
NEXT i
FOR i = m TO 1 STEP -1
  q$ = LTRIM$(STR$(b(i)))
  PRINT q$;
NEXT i
END

10 楼

CLS
INPUT a$, b$
a = LEN(a$): lb = LEN(b$)
da = INSTR(a$, "."): db = INSTR(b$, ".")
IF da = 0 THEN a1 = la ELSE a1 = da - 1: a2 = la - da
IF db = 0 THEN b1 = lb ELSE b1 = db - 1: b2 = lb - db
IF a1 > b1 THEN m1 = a1 ELSE m1 = b1
IF a2 > b2 THEN m2 = a2 ELSE m2 = b2
DIM a$(-m1 TO m2), b$(-m1 TO m2), c$(-m1 TO m2)
FOR i = -a1 TO a2: a$(i) = MID$(a$, a1 + i + 1, 1): NEXT i
FOR i = -b1 TO b2: b$(i) = MID$(b$, b1 + i + 1, 1): NEXT i
FOR i = m2 TO -m1 STEP -1
  IF i <> 0 THEN
    x = VAL(a$(i)) + VAL(b$(i)) + c
    IF x >= 10 THEN c = 1 ELSE c = 0
  END IF
  c$(i) = LTRIM$(STR$(x MOD 10))
NEXT i
PRINT SPC(m1 - a1 + 1); a$
PRINT "+"; SPC(m1 - b1); b$
PRINT STRING$(m1 + m2 + 3, "-")
IF c <> 0 THEN PRINT USING "#"; c;  ELSE PRINT " ";
FOR i = -m1 TO m2
  IF i = 0 THEN
    IF (a2 <> 0 OR b2 <> 0) THEN PRINT ".";
  ELSE 
    PRINT c$(i);
  END IF
NEXT i
END

我来回复

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