- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高精度(学习教程和方法)
高精度加法
var s1,s2:string;
a,b,c:array [1..260] of integer;
i,l,k1,k2:integer;
begin
write(input s1:);readln(s1);
write(input s2:);readln(s2);
{————读入两个数s1,s2,都是字符串类型}
l:=length(s1);{求出s1的长度,也即s1的位数;有关字符串的知识。}
k1:=260;
for i:=l downto 1 do
begin
a[k1]:=ord(s1)-48;{将字符转成数值}
k1:=k1-1;
end;
k1:=k1+1;
{————以上将s1中的字符一位一位地转成数值并存在数组a中;低位在后(从第260位开始),高位在前(每存完一位,k1减1),完后,k1指向最高位}
对s2的转化过程和上面一模一样。
二、运算过程
在往下看之前,大家先列竖式计算35+86。
注意的问题:
(1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位;
(2)运算规则:同一位的两个数相加再加上从低位来的进位,成为该位的和;这个和去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1,本位的值是2;可借助MOD、DIV运算完成这一步;
(3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位;
(4)如果两个加数位数不一样多,则按位数多的一个进行计算;
if k1k2 then k:=k1 else k:=k2;
y:=0;
for i:=260 downto k do
begin
x:=a+b+y;
c:=x mod 10;
y:=x div 10;
end;
if y0 then begin k:=k-1;c[k]:=y; end;
三、结果的输出(这也是优化的一个重点)
按运算结果的实际位数输出
for i:=k to 260 do write(c);
writeln;
例子:求两个数的加法
program sum;
var s,s1,s2:string;
a,b,c:array [1..260] of integer;
x,y,i,l,k1,k2,k:integer;
begin
write(input s1:);readln(s1);
write(input s2:);readln(s2);
l:=length(s1);
k1:=260;
for i:=l downto 1 do
begin
a[k1]:=ord(s1[i])-48;
k1:=k1-1;
end;
k1:=k1+1;
l:=length(s2);
k2:=260;
for i:=l downto 1 do
begin
b[k2]:=ord(s2[i])-48;
k2:=k2-1;
end;
k2:=k2+1;
if k1k2
then k:=k2
else k:=k1;
y:=0;
for i:=260 downto k do
begin
x:=a[i]+b[i]+y;
c[i]:=x mod 10;
y:=x div 10;
end;
if y0
then
begin
k:=k-1;
c[k]:=y;
end;
for i:=k to 260 do write(c[i]);
writeln;
end.
四、优化:
以上的方法的有明显的缺点:
(1)浪费空间:一个整型变量(-32768~32767)只存放一位(0~9);
(2)浪费时间:一次加减只处理一位;
针对以上问题,我们做如下优化:一个数组元素存放四位数;(integer的最大范围是32767,5位的话可能导致出界)将标准数组改为紧缩数组。第一步的具体方法:
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。
改进后的算法:
program sum;
您可能关注的文档
- 网络构建与协议分析课程设计报告.doc
- 3实数复习.ppt
- 植物学期末试卷.docx
- 数学选修4-4学案.doc
- 2012年======瓦斯治理规划.doc
- 北京市西城区2011届上学期初中九年级期末考试数学试卷.doc
- 科技作文写法.doc
- 触摸春天完整版.doc
- 学习德国双元制的体会.doc
- 精编人教版五年级数学上册:观察物体课件1.ppt
- 渤海汽车2025年第三季度报告.pdf
- 【生物】湖南省部分学校2025-2026学年高三上学期9月联考(学生版).pdf
- 第五章 一元一次方程(单元解读课件)数学人教版2024七年级上册.pdf
- 【生物】湖南省部分学校2025-2026学年高三上学期9月联考(解析版).pdf
- 【生物】湖北省部分高中协作体2025-2026学年高二上学期9月联考(学生版) .pdf
- 华斯股份:2025年三季度报告.pdf
- 安徽省蚌埠市蚌埠第二中学2025-2026学年高二(上)开学检测物理试卷.pdf
- 安徽省六安市裕安区2024-2025学年高二生物上学期12月月考(解析版).pdf
- 安徽省皖南八校2024-2025年高二生物上学期期中考试(解析版).pdf
- 第五章 一元一次方程(复习课件)数学人教版2024七年级上册.pdf
最近下载
- SYT 6150.1-2011 钢制管道封堵技术规程 第1部分塞式、筒式封堵.docx VIP
- TCESA1249.22023服务器及存储设备用液冷装置技术规范第2部分连接系统.docx VIP
- 2025新修订《治安管理处罚法》应知应会100题(含答案+解析).docx
- 标准图集-鲁L19G402_预应力高强混凝土实心方桩.pdf VIP
- 《卓有成效的管理者》解读课件.pptx VIP
- 科研组长竞聘PPT课件.pptx VIP
- GSO∕UAE.S. 2055-1:2015 清真食品通用要求.docx VIP
- 电子信息系统机房施工及验收规范.pdf VIP
- 小儿过敏性紫癜护理查房.pptx VIP
- 在线网课学习课堂《临床伦理与科研道德(山东大学)》单元测试考核答案.docx VIP
原创力文档


文档评论(0)