作者在 2011-10-02 09:08:09 发布以下内容
DECLARE FUNCTION Add$ (a$, b$)
OPEN "Sum.in" FOR INPUT AS #1
OPEN "Sum.out" FOR OUTPUT AS #2
CLS
INPUT #1, n
FOR z = 1 TO n
INPUT #1, s$
p = INSTR(s$, " ")
a$ = LEFT$(s$, p - 1)
b$ = RIGHT$(s$, LEN(s$) - p)
PRINT #2, Add$(a$, b$)
NEXT z
CLOSE
END
FUNCTION Add$ (a$, b$)
la = LEN(a$)
lb = LEN(b$)
IF la < lb THEN SWAP la, lb: SWAP a$, b$
FOR i = 1 TO la
a = VAL(MID$(a$, la + 1 - i, 1))
IF i <= lb THEN b = VAL(MID$(b$, lb + 1 - i, 1)) ELSE b = 0
c = a + b + jw
jw = c \ 10
c = c MOD 10
s$ = LTRIM$(STR$(c)) + s$
NEXT i
IF jw <> 0 THEN s$ = "1" + s$
Add$ = s$
END FUNCTION
高精度多组加法(无数组)OPEN "Sum.in" FOR INPUT AS #1
OPEN "Sum.out" FOR OUTPUT AS #2
CLS
INPUT #1, n
FOR z = 1 TO n
INPUT #1, s$
p = INSTR(s$, " ")
a$ = LEFT$(s$, p - 1)
b$ = RIGHT$(s$, LEN(s$) - p)
PRINT #2, Add$(a$, b$)
NEXT z
CLOSE
END
FUNCTION Add$ (a$, b$)
la = LEN(a$)
lb = LEN(b$)
IF la < lb THEN SWAP la, lb: SWAP a$, b$
FOR i = 1 TO la
a = VAL(MID$(a$, la + 1 - i, 1))
IF i <= lb THEN b = VAL(MID$(b$, lb + 1 - i, 1)) ELSE b = 0
c = a + b + jw
jw = c \ 10
c = c MOD 10
s$ = LTRIM$(STR$(c)) + s$
NEXT i
IF jw <> 0 THEN s$ = "1" + s$
Add$ = s$
END FUNCTION
DECLARE SUB Qsort (lo, hi)
RANDOMIZE TIMER
OPEN "Times.in" FOR INPUT AS #1
OPEN "Times.out" FOR OUTPUT AS #2
CLS
DIM SHARED n
INPUT #1, n
DIM SHARED a(n) AS DOUBLE
FOR i = 1 TO n
INPUT #1, x, y, z
a(i) = x * 3600 + y * 60 + z
NEXT i
Qsort 1, n
FOR i = 1 TO n
z = a(i) MOD 60
y = ((a(i) - z) MOD 3600) \ 60
x = (a(i) - y - z) \ 3600
PRINT #2, LTRIM$(STR$(x)); " " + LTRIM$(STR$(y)); " " + LTRIM$(STR$(z))
NEXT i
CLOSE
END
SUB Qsort (lo, hi)
i = lo
j = hi
t = a(FIX(RND * (hi - lo + 1)) + lo)
DO
WHILE a(i) < t
i = i + 1
WEND
WHILE a(j) > t
j = j - 1
WEND
IF i <= j THEN
SWAP a(i), a(j)
i = i + 1
j = j - 1
END IF
LOOP UNTIL i > j
IF i < hi THEN Qsort i, hi
IF j > lo THEN Qsort lo, j
END SUB
多时间段排序(随机化快排)RANDOMIZE TIMER
OPEN "Times.in" FOR INPUT AS #1
OPEN "Times.out" FOR OUTPUT AS #2
CLS
DIM SHARED n
INPUT #1, n
DIM SHARED a(n) AS DOUBLE
FOR i = 1 TO n
INPUT #1, x, y, z
a(i) = x * 3600 + y * 60 + z
NEXT i
Qsort 1, n
FOR i = 1 TO n
z = a(i) MOD 60
y = ((a(i) - z) MOD 3600) \ 60
x = (a(i) - y - z) \ 3600
PRINT #2, LTRIM$(STR$(x)); " " + LTRIM$(STR$(y)); " " + LTRIM$(STR$(z))
NEXT i
CLOSE
END
SUB Qsort (lo, hi)
i = lo
j = hi
t = a(FIX(RND * (hi - lo + 1)) + lo)
DO
WHILE a(i) < t
i = i + 1
WEND
WHILE a(j) > t
j = j - 1
WEND
IF i <= j THEN
SWAP a(i), a(j)
i = i + 1
j = j - 1
END IF
LOOP UNTIL i > j
IF i < hi THEN Qsort i, hi
IF j > lo THEN Qsort lo, j
END SUB