高精度计算高精度加法高精度运算主要解决以下三个问题:一、加数、减数、运算结果的输入和存储运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示
在Pascal中,能表示多个数的数据类型有两种:数组和字符串
数组:每个数组元素存储1位(在优化时,这里是一个重点!),有多少位就需要多少个数组元素;用数组表示数的优点:每一位都是数的形式,可以直接加减;运算时非常方便
用数组表示数的缺点:数组不能直接输入;输入时每两位数之间必须有分隔符,不符合数值的输入习惯;字符串:String型字符串的最大长度是255,可以表示255位
Ansistring型字符串长度不受限制
用字符串表示数的优点:能直接输入输出,输入时,每两位数之间不必分隔符,符合数值的输入习惯;用字符串表示数的缺点:字符串中的每一位是一个字符,不能直接进行运算,必须先将它转化为数值再进行运算;运算时非常不方便;综合以上所述,对上面两种数据结构取长补短:用字符串读入数据,用数组存储数据:var st:string;x,y:array[0..255]of integer;{定义两个数组,X和Y,用来储存数}i,j,l1,l2:integer;beginreadln(st);l1:=length(st);{------length(x),该函数是获取字符串X的长度,返回为整型}for i:=0 to 255 do x[i]:=0;{数组初始化,该句等价于‘fillchar(x,sizeof(x),o);’,即给一数组整体赋值,但运行速度快于用‘for’语句对数组中的每一个数赋值}for i:=l1 downto 1 dox[l1-i+1]:=ord(st[i])-ord('0');{------这里是重点,把字符串转换为数值,储存在数组中}readln(st);l2:=length(st);{------length(x),该函数是获取字符串X的长度,返回为整型}for i:=0 to 255 do y[i]:=0;{数组初始化,该句等价于‘fillchar(y,sizeof(y),o);’}for i:=l2 downto 1 doy[l2-i+1]:=ord(st[i])-ord('0');{------这里是重点,把字符串转换为数值,储存在数组中}对字符串转为数值原理补充:ord(x)-48,如果X='1',因为'1'的ASCLL码是49,所以减去48就等于1,间接地把字符转换为数值了,各位初手要好好体会.二、运算过程在往下看之前,大家先列竖式计算35+86
注意的问题:(1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位;(2)运算规则:同一位的两个数相加再加上从低位来的进位,成为该位的和;这个和去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1,本位的值是2;可借助MOD、DIV运算完成这一步;(3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位;(4)如果两个加数位数不一样多,则按位数多的一个进行计算;if l1 第一步的具体方法:l:=length(s1);k1:=260;repeat {————有关字符串的知识}s:=copy(s1,l-3,4);val(s,a[k1],code);k1:=k1-1;s1:=copy(s1,1,l-4);l:=l-4;until l<=0;k1:=k1+1;而因为这个改进,算法要相应改变:(1)运算时:不再逢十进位,而是逢万进位(mod 10000; div 10000);(2)输出时:最高位直接输出,其余各位,要判断是否足够4位,不足部分要补0;例如:1,23,2345这样三段的数,输出时,应该是100232345而不是1232345 改进后的算法:var a,b:string; k,i,c,d:longint; e,z,y:array[0..255]of integer;beginreadln(a);readln(b);if length(b)>length(a) then for i:=1 to length(b)-length(a) doa:='0'+aelse for i:=1 to length(a)-length(b) dob:='0'+b;for i:=length(a) downto 1 dobeginc:=ord(a[i])-48;d:=ord(b[i])-48;if c+d<10 then e[i]:=e[i]+c+d else begin e[i]:=e[i]+c+d-10;e[i-1]:=1; end;end;if e=1 then k:=0 else k:=1;for i:=k to length(a) dowrite(e[i]);end.C++参考程序:#include 以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。