主题:请教,一个说难又难说容易又容易的问题
99261028
[专家分:0] 发布于 2007-06-08 09:17:00
pascal中如何处理一组很大的数,注意是一组(很多),不是一个哦.
数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围,怎么处理如此大的数呢?[em15]
排除以下两种方法:
1:用数组的每个元素表示数的每一位;
2:用字符串表示数
回复列表 (共10个回复)
沙发
worm. [专家分:180] 发布于 2007-06-08 11:57:00
用数组的每个元素表示数的每4位
这是最优化算法了
别的就没有了
仔细分析题目,有的并不需要人为保存数据,比如递归中的隐含回溯
板凳
万里长城 [专家分:340] 发布于 2007-06-08 16:12:00
ingeger足够说明问题,不行的话,可以用longint
3 楼
bigchen [专家分:1940] 发布于 2007-06-08 21:34:00
数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围??????
我记得integer可以表示到32767
longint可以表示到2147483647
并没有超出范围啊?!
您不是提前过明年愚人节了吧?
orz
4 楼
Matodied [专家分:7560] 发布于 2007-06-08 22:51:00
只能用倒序输入的办法实现。
首先把这个数从低位到高位依次输入,然后输入-1,就可以显示结果了。
我记得在QBasic里是这么样的:
CLS
CALL p
END
SUB p
DO
INPUT s
IF s <> -1 THEN CALL p
IF s <> -1 THEN PRINT USING"#";s;
LOOP
END SUB
那么改成PASCAL程序就是:
PROCEDURE p;
VAR
a, s: INTEGER;
BEGIN
REPEAT
READLN(s);
IF s<>-1 THEN p;
IF s<>-1 THEN WRITE(s);
UNTIL a<>0
END;
BEGIN
p;
END.
[color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=FFFF00][color=808080][color=800080][color=808080][color=FFFF00][color=00FF00][color=00FFFF][color=FF00FF][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000]我编PASCAL程序的原则:先编相应的QBasic的程序,再改成PASCAL的.
比如a=1改成a:=1,DIM改成VAR等.
本人初学PASCAL,请指教!![/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color]
5 楼
游侠UFO [专家分:1200] 发布于 2007-06-11 22:08:00
[quote]只能用倒序输入的办法实现。
首先把这个数从低位到高位依次输入,然后输入-1,就可以显示结果了。
我记得在QBasic里是这么样的:
CLS
CALL p
END
SUB p
DO
INPUT s
IF s <> -1 THEN CALL p
IF s <> -1 THEN PRINT USING"#";s;
LOOP
END SUB
那么改成PASCAL程序就是:
PROCEDURE p;
VAR
a, s: INTEGER;
BEGIN
REPEAT
READLN(s);
IF s<>-1 THEN p;
IF s<>-1 THEN WRITE(s);
UNTIL a<>0
END;
BEGIN
p;
END.
[color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=FFFF00][color=808080][color=800080][color=808080][color=FFFF00][color=00FF00][color=00FFFF][color=FF00FF][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000]我编PASCAL程序的原则:先编相应的QBasic的程序,再改成PASCAL的.
比如a=1改成a:=1,DIM改成VAR等.
本人初学PASCAL,请指教!![/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/quote]
建议还是尽量直接用PASCAL写,因为PASCAL里面的东西用BASIC实在不好实现
6 楼
maxumi [专家分:2200] 发布于 2007-06-12 09:34:00
[quote]数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围??????
我记得integer可以表示到32767
longint可以表示到2147483647
并没有超出范围啊?!
您不是提前过明年愚人节了吧?
orz
[/quote]
58,980,856,902,730,428,600就是58980856902730428600
orz
7 楼
maxumi [专家分:2200] 发布于 2007-06-12 09:36:00
这个就是高精度算法嘛
定义一个bignum类型
type
bignum=array[1..100]of byte;
var
a:bignum;
然后a[n]就是数的从右向左第n位
8 楼
bigchen [专家分:1940] 发布于 2007-06-12 21:26:00
理解错误
汗~~~~~
如果一个数组单元不能表示一位
那么表示两位或者多位不就可以了吗?
压位的方法可以在一定程度上节约空间
PS:表示数字直接写在一起不就行了吗?
干吗三位一分??
9 楼
迷路的天使 [专家分:1340] 发布于 2007-11-21 18:16:00
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
10 楼
迷路的天使 [专家分:1340] 发布于 2007-11-21 18:16:00
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc
我来回复