回 帖 发 新 帖 刷新版面

主题:请教,一个说难又难说容易又容易的问题

pascal中如何处理一组很大的数,注意是一组(很多),不是一个哦.
数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围,怎么处理如此大的数呢?[em15]
排除以下两种方法:
     1:用数组的每个元素表示数的每一位;
     2:用字符串表示数

回复列表 (共10个回复)

沙发

用数组的每个元素表示数的每4位
这是最优化算法了

别的就没有了

仔细分析题目,有的并不需要人为保存数据,比如递归中的隐含回溯

板凳

ingeger足够说明问题,不行的话,可以用longint

3 楼

数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围??????
我记得integer可以表示到32767
longint可以表示到2147483647
并没有超出范围啊?!
您不是提前过明年愚人节了吧?
orz

4 楼

只能用倒序输入的办法实现。
首先把这个数从低位到高位依次输入,然后输入-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 楼

[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 楼

[quote]数字大到:58,980,856,902,730,428,600,这个数肯定超出了数据类型的范围??????
我记得integer可以表示到32767
longint可以表示到2147483647
并没有超出范围啊?!
您不是提前过明年愚人节了吧?
orz

[/quote]

58,980,856,902,730,428,600就是58980856902730428600
orz

7 楼

这个就是高精度算法嘛
定义一个bignum类型
type
  bignum=array[1..100]of byte;
var
  a:bignum;
然后a[n]就是数的从右向左第n位

8 楼

理解错误
汗~~~~~
如果一个数组单元不能表示一位
那么表示两位或者多位不就可以了吗?
压位的方法可以在一定程度上节约空间
PS:表示数字直接写在一起不就行了吗?
干吗三位一分??

9 楼


xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc

10 楼


xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc

我来回复

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