高精度加法(简明版C语言),[转载]LOGO语言编程题  高精度加法★★★★

本文介绍了如何使用LOGO语言实现不限位数的整数高精度加法。通过五个诀窍详细阐述了处理过程,包括将数字转化为字符串、分离数位、转换为数值、进行加法运算和处理进位。文章强调了LOGO语言在处理此类计算时的挑战,但通过巧妙的方法仍然可以解决。并提供了具体的代码示例和计算实例,展示了算法的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不限制位数的整数高精度加法★★★★

这是“高精度算法”系列文章中的第一篇,实际上是最基础、最重要的一篇。因为“高精度加、减、乘、除”的一些最基本的技巧已经差不多都使用上了。在这4种计算中,加法最基础、最简单,乘法稍难,减法更难,除法最难。

LOGO语言在计算能力上的致命缺点是没有“长整数”,没有“高精度小数”,“数”和“字符串”的概念含混。这就导致有些在其他种类语言中比较容易的题目,在LOGO语言中显得较为麻烦。

但是这并不是就此无所作为。我们仍然坚信:“没有编写不出来的程序,只有还没有被想出来的方法”。坚信这样的信条,处理这些本来看起来不可能有解的难题,总有解决的办法。林老师平时能够使用LOGO、VB、C、PASCAL、C++、FORTRAN等计算机程序设计语言编程,林老师的经验是:假如这道题你用LOGO能够编写,那么你使用其他语言编写这道题目的程序,只会更加容易一些。所以用LOGO语言来“练兵”,是有实战意义的。

诀窍①:在一长串的数字前面随意加上一个字符,LOGO系统就会把它作为字符串处理,而不会变成讨厌的无法处理的“科学计数法”数字。

诀窍②:在处理这些数时,去掉前面的字符,把后面的数字一个个用ITEM命令剪切下来,即是把数位分离开来。

诀窍③:记住,这时被剪切出来的数位还是字符,所以要用ASCII命令读出ASCII值,再减去48,这时的值已经还原成“数字”。

诀窍④,用FOR循环从低位开始向高位进行加法,加出来的结果存在第3个数组中,凡是一个位上加出来的值大于9的话,就要向高位“进位”。

诀窍⑤,说到这里简直都不能成为“诀窍”了,因为情况已经很清楚了,当然最后一步是把计算结果显示出来。

判断你懂了没有,不是看懂了程序就算数,而是如果及自己重新编写一次,假如能行的话,那才是完全彻底的明白了

TO JIA_N ;任意位数加法

PR

"请输入第一个加数并在数字前加上1个任意字母:

MAKE "A

READ ;从键盘上读入第一个数

MAKE "A1 COUNT

:A ;测试数的长度

PR

"请输入第二个加数并在数字前加上1个任意字母:

MAKE "B

READ ;从键盘上读入第二个数

MAKE "B1 COUNT

:B ;测试数的长度

IF

:A1>:B1 THEN[MAKE "C :A1]ELSE[MAKE "C

:B1]

;计算求和空间的最大长度

MAKE "JA

BYTEARRAY

:C ;建立第一个加数存储空间

MAKE "JB

BYTEARRAY

:C ;建立第二个加数存储空间

MAKE "JC

BYTEARRAY

:C+2 ;建立储存和的空间

FOR "I 1

(:A1-1)[ASET :JA :I (ASCII(ITEM :A1-:I+1 :A))-48]

;将第一个数字拆位存储

FOR "I 1

(:B1-1)[ASET :JB :I (ASCII(ITEM :B1-:I+1 :B))-48]

;将第二个数字拆位存储

FOR "I 1

(:C-1)[ASET :JC :I (AGET :JA :I)+(AGET :JB :I)]

;进行加法

FOR "I 1

(:C-1)[IF 9

ASET :JC :I (AGET :JC :I)-10

ASET :JC :I+1 1+AGET :JC :I+1]] ;处理进位

;===============显示输出算式=================

FOR "I 1

(:A1-1)[TYPE AGET :JA :A1-:I] ;显示第一个加数

TYPE[+]

FOR "I 1

(:B1-1)[TYPE AGET :JB :B1-:I] ;显示第二个加数

TYPE[=]

;===============显示输出答案=================

IF (AGET :JC

:C+1)>0 THEN TYPE AGET :JC :C+1

IF (AGET :JC

:C)>0 THEN TYPE AGET :JC :C

;显示可能存在的最高位

FOR "I 2

:C[TYPE AGET :JC :C-:I+1]

;显示其它数位

PR[] ;中断接连的显示输出

END

计算实例:

JIA_N

请输入第一个加数并在数字前加上1个任意字母:

? A123456789

请输入第二个加数并在数字前加上1个任意字母:

? A987654321

123456789+987654321=1111111110

? JIA_N

请输入第一个加数并在数字前加上1个任意字母:

? A991234567894567

请输入第二个加数并在数字前加上1个任意字母:

? A98776544432

991234567894567+98776544432=991333344438999

? JIA_N

请输入第一个加数并在数字前加上1个任意字母:

? A999999999123456789

请输入第二个加数并在数字前加上1个任意字母:

? A876543211

999999999123456789+876543211=1000000000000000000

? JIA_N

请输入第一个加数并在数字前加上1个任意字母:

? A25008365428791263748

请输入第二个加数并在数字前加上1个任意字母:

?

A665372654312993754310008377

25008365428791263748+665372654312993754310008377=665372679321359183101272125

这里是新颖有趣的LOGO、DEV-C++语言之家

欢迎评论 欢迎转载

查找林老师博客最便捷的方法:

在百度、谷歌、搜狗、搜搜、雅虎、有道等搜索引擎中输入

林老师 LOGO

就能找到林老师博客文章了

查阅林老师最新发表文章的链接:

快速检索数百篇博客提高阅读效率的链接:

因网络拥挤“纸条”常不能及时打开查阅。有信息尽量使用“评论”或邮件。

需要LOGO系统文件常用表格工具文件及DEV-C++系统文件的可以发邮件给林老师

声明:

林正山老师发表的文章及照片,媒体、网站或出版物未经本人许可谢绝进行任何形式的删节、改编、重组及转载。

允许个人博客按原文(含图片及附注)进行完整转载,转载时敬请注明本博作者姓名、文章原始出处,并以链接形式标明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值