1 / 19

高精度计算器

高精度计算器. 算法思想介绍. 算法要求. 设计一个高精度计算器 可以实现一百位以上、五百位以下数的运算 加法 减法 乘法 除法. 数据逻辑结构. 两个操作数均为线性结构 结果也为线性结构. 数据存储结构设计. 操作数和操作符均采用顺序存储结构(数组)进行存储 数组类型可以是字符型(节省存储空间) 也可以是整数类型(运算方便) 以下以整数数组为例. 数据存储结构设计. 操作数:设数组 A 和数组 B 为长度为 500 的整型数组,下标从 1 开始。 运算结果:设数组 C 也为长度为 500 的整型数组,下标从 1 开始。.

pia
Download Presentation

高精度计算器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 高精度计算器 算法思想介绍

  2. 算法要求 • 设计一个高精度计算器 • 可以实现一百位以上、五百位以下数的运算 • 加法 • 减法 • 乘法 • 除法

  3. 数据逻辑结构 • 两个操作数均为线性结构 • 结果也为线性结构

  4. 数据存储结构设计 • 操作数和操作符均采用顺序存储结构(数组)进行存储 • 数组类型可以是字符型(节省存储空间) • 也可以是整数类型(运算方便) • 以下以整数数组为例

  5. 数据存储结构设计 • 操作数:设数组A和数组B为长度为500的整型数组,下标从1开始。 • 运算结果:设数组C也为长度为500的整型数组,下标从1开始。 下标:1 2 3 4 …… 500 操作数A: 操作数B: 结果C:

  6. 数据输入(Data in) • 将A、B、C数组的每一位用0填充 • 输入数据A和B,他们的最后一位均存在下标为500的位置——末位对齐 • 如:输入A为12345 • B为123456789 • 存储结构为: 下标:1 2 …… 495 496 497 498 499 500 1 2 3 4 5 1 2 3 4 5 操作数A: 操作数B: 1 2 3 4 5 6 7 8 9

  7. 加法运算 • 从末位开始,对应位进行加法:C[i]=A[i]+B[i]+JW • 若结果小于10,直接存入数组C中对应单元,JW=0 • 若结果大于等于10,将其减10后的结果存入数组C中对应位,并记进位位变量值为1:JW=1。 下标:1 2 …… 495 496 497 498 499 500 1 2 3 4 5 1 2 3 4 5 操作数A: 操作数B: 1 2 3 4 5 6 7 8 9 JW=0 JW=0 JW=0 JW=0 JW=0 JW=1 JW=1 JW=1 JW=0 1 1 2 3 4 6 9 11 13 3 14 4 结果C:

  8. 减法运算 • 从末位开始,对应位进行减法:C[i]=A[i]-B[i]-JW(借位) • 若结果大于等于0,直接存入数组C中对应单元,JW=0 • 若结果小于0,c[i]=c[i]+10,并记JW=1。 下标:1 2 …… 495 496 497 498 499 500 1 2 3 4 5 1 2 3 4 5 操作数A: 操作数B: 1 7 8 9 JW=0 JW=0 JW=1 JW=1 JW=1 JW=0 1 0 5 6 结果C: -5 5 -5 -4

  9. 简单乘法运算 • 将乘数的每一位单独拿出来(设为X)乘以被乘数——N位数乘1位数——将该N位数累加即可。 • 注意:进位问题 • 如:12345×1789

  10. 1 1 0 5 1 1 第一步:12345×9 • 调用9次12345自加,得到: 下标:1 2 …… 495 496 497 498 499 500 1 2 3 4 5 1 2 3 4 5 操作数A: 操作数B: 9 结果:

  11. 9 6 0 8 7 第二步:12345×8 • 调用8次12345自加,得到: 下标:1 2 …… 495 496 497 498 499 500 1 2 3 4 5 1 2 3 4 5 操作数A: 操作数B: 8 结果:

  12. 1 1 0 5 1 1 9 6 0 0 8 7 + 0 7 0 0 9 8 1 • 将第二次的结果左移一位(×10)后累加上第一次的结果 • 依次类推,直至所有乘数都乘完为止

  13. 除法运算 • 此处只演示被除数大于除数的情况 • 假设被除数有M位,除数有N位(M>=N) • 第一步:从被除数的左边取出N位,将其与除数进行逐位比较,得出大于或等于或小于三种结果。 • 若结果是小于,再取被除数的下一位补上。 • 第二步:将除数乘2后与被除数比较,小于则再乘3,小于则再乘4,……直至得到的结果是大于为止——得到一个商(小于最后一个乘数的整数)。

  14. 第三步,将取出的部分被除数(N位或N+1位的)减去除数乘以商的结果,得到“余数”。第三步,将取出的部分被除数(N位或N+1位的)减去除数乘以商的结果,得到“余数”。 • 第四步,把余数作为新的被除数,将原除数的剩余位补上。 • 重复以上操作。

  15. 2458 1234 123456789÷2458=? 第一步:从被除数的左边取出N位,将其与除数进行逐位比较,得出大于或等于或小于三种结果。 以上结果为:小于

  16. 123456789÷2458=? • 被除数追加一位 2458 12345

  17. 2458 2458 × 2 × 3 4916 <12345 7374 <12345 2458 2458 2458 × 4 × 5 × 6 9832 12290 14748 <12345 <12345 >12345 123456789÷2458=?

  18. 12345 - 12290 55 123456789÷2458=? • 得到第一个商:5 • 用现在的被除数12345减去2458×5的结果,得到余数

  19. 123456789÷2458=? • 从原被除数中乘余位补在余数上,并将余数作为新的被除数,除数式变为:556789÷2458=? • 判断被除数是否小于除数,是则完成整除运算。 • 否则重复以上运算 。

More Related