主题:来就送分(2)
wangyunchaoPIG
[专家分:130] 发布于 2007-05-04 14:22:00
因一个主题每各人最多只能锝50分,所以,如果你发现你在"来就送分"帖子中有的尚未评分,请把帖子复制到这里来,继续加分!特此通知!
回复列表 (共23个回复)
沙发
强强 [专家分:4740] 发布于 2007-05-04 14:31:00
这是什么意思?
3 楼
wzc1996 [专家分:1680] 发布于 2007-05-04 16:58:00
阶乘
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 楼
Matodied [专家分:7560] 发布于 2007-05-04 20:20:00
再过两天就是市赛了,对于我来说,初赛没什么问题,可是复赛就有大问题了,我一定要打败:佑慧妹妹、美味的汽水!!!!!
(续:加、减、乘法的程序我已经发过了)
除法(如有循环节输出循环节,用黄色表示):
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 楼
Matodied [专家分:7560] 发布于 2007-05-04 20:31:00
乘方:
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 楼
Matodied [专家分:7560] 发布于 2007-05-04 20:33:00
阶乘(如果输入的数过大,运行时间会很长,建议不要输超过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 楼
Matodied [专家分:7560] 发布于 2007-05-04 20:48:00
还有,你会不会做今年区复赛的最后一题了?不会就看我的"快给答案"的程序.
8 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-04 22:00:00
4楼看来真的把我当对手了呢!呵呵,市赛不比区赛难,我有信心考好的,所以,我一定要打败你,哦呵呵呵呵。楼主,我的程序有什么错误吗?为什么不加分?
谢谢7楼关心,那题我已经看过你的程序了,大概的思路我也清楚了。
9 楼
BakerHam [专家分:30] 发布于 2007-05-05 18:31:00
阶乘
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 楼
BakerHam [专家分:30] 发布于 2007-05-05 18:32:00
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
我来回复