1、高精度计算器高精度计算器算法思想介绍算法思想介绍算法要求算法要求 设计一个高精度计算器设计一个高精度计算器 可以实现一百位以上、五百位以下数的运可以实现一百位以上、五百位以下数的运算算 加法加法 减法减法 乘法乘法 除法除法数据逻辑结构数据逻辑结构 两个操作数均为线性结构两个操作数均为线性结构 结果也为线性结构结果也为线性结构数据存储结构设计数据存储结构设计 操作数和操作符均采用顺序存储结构(数操作数和操作符均采用顺序存储结构(数组)进行存储组)进行存储 数组类型可以是字符型(节省存储空间)数组类型可以是字符型(节省存储空间)也可以是整数类型(运算方便)也可以是整数类型(运算方便)以下以整数数
2、组为例以下以整数数组为例数据存储结构设计数据存储结构设计 操作数:设数组操作数:设数组A和数组和数组B为长度为为长度为500的的整型数组,下标从整型数组,下标从1开始。开始。运算结果:设数组运算结果:设数组C也为长度为也为长度为500的整型的整型数组,下标从数组,下标从1开始。开始。操作数操作数A:操作数操作数B:结果结果C:下标:下标:1 2 3 4 500数据输入(数据输入(Data in)将将A、B、C数组的每一位用数组的每一位用0填充填充 输入数据输入数据A和和B,他们的最后一位均存在下标为,他们的最后一位均存在下标为500的位置的位置末位对齐末位对齐 如:输入如:输入A为为12345
3、 B为为123456789 存储结构为:存储结构为:操作数操作数A:操作数操作数B:下标:下标:1 2 495 496 497 498 499 5005432154321987654321加法运算加法运算 从末位开始,对应位进行加法:从末位开始,对应位进行加法:Ci=Ai+Bi+JW 若结果小于若结果小于10,直接存入数组,直接存入数组C中对应单元,中对应单元,JW=0 若结果大于等于若结果大于等于10,将其减,将其减10后的结果存入数组后的结果存入数组C中中对应位,并记进位位变量值为对应位,并记进位位变量值为1:JW=1。操作数操作数A:操作数操作数B:下标:下标:1 2 495 496 4
4、97 498 499 5005432154321987654321结果结果C:414JW=13196432113JW=111JW=1JW=0JW=0JW=0JW=0JW=0JW=0减法运算减法运算 从末位开始,对应位进行减法:从末位开始,对应位进行减法:Ci=Ai-Bi-JW(借位)(借位)若结果大于等于若结果大于等于0,直接存入数组,直接存入数组C中对应单元,中对应单元,JW=0 若结果小于若结果小于0,ci=ci+10,并记,并记JW=1。操作数操作数A:操作数操作数B:下标:下标:1 2 495 496 497 498 499 50054321543219871结果结果C:6-4JW=1
5、5501-5JW=1-5JW=1JW=0JW=0JW=0简单乘法运算简单乘法运算 将乘数的每一位单独拿出来(设为将乘数的每一位单独拿出来(设为X)乘以)乘以被乘数被乘数N位数乘位数乘1位数位数将该将该N位数位数累加累加X次即可。次即可。注意:进位问题注意:进位问题 如:如:123451789操作数操作数A:操作数操作数B:下标:下标:1 2 495 496 497 498 499 50054321543219结果:结果:第一步:第一步:123459 调用调用9次次12345自加,得到:自加,得到:501111第二步:第二步:123458操作数操作数A:操作数操作数B:下标:下标:1 2 495
6、 496 497 498 499 50054321543218结果:结果:06789 调用调用8次次12345自加,得到:自加,得到:将第二次的结果左移一位(将第二次的结果左移一位(10)后累加)后累加上第一次的结果上第一次的结果5011110678900789001 依次类推,直至所有乘数都乘完为止依次类推,直至所有乘数都乘完为止除法运算除法运算 此处只演示被除数大于除数的情况此处只演示被除数大于除数的情况 假设被除数有假设被除数有M位,除数有位,除数有N位(位(M=N)第一步:从被除数的左边取出第一步:从被除数的左边取出N位,将其与位,将其与除数进行逐位比较,得出除数进行逐位比较,得出大于
7、大于或或等于等于或或小小于于三种结果。三种结果。若结果是小于,再取被除数的下一位补上。若结果是小于,再取被除数的下一位补上。第二步:将除数乘第二步:将除数乘2后与被除数比较,后与被除数比较,小于小于则再乘则再乘3,小于小于则再乘则再乘4,直至得到的直至得到的结果是结果是大于大于为止为止得到一个商(小于最得到一个商(小于最后一个乘数的整数)。后一个乘数的整数)。第三步,将取出的第三步,将取出的部分被除数部分被除数(N位或位或N+1位的)减去除数乘以商的结果,得到位的)减去除数乘以商的结果,得到“余余数数”。第四步,把余数作为新的被除数,将原除第四步,把余数作为新的被除数,将原除数的剩余位补上。数
8、的剩余位补上。重复以上操作。重复以上操作。1234567892458=?12342458第一步:从被除数的左边取出第一步:从被除数的左边取出N位,将其与位,将其与除数进行逐位比较,得出除数进行逐位比较,得出大于大于或或等于等于或或小于小于三种结果。三种结果。以上结果为:小于以上结果为:小于1234567892458=?被除数追加一位被除数追加一位1234524581234567892458=?2458 24916 123452458 37374 123452458 49832123452458 51229012345 得到第一个商:得到第一个商:5 用现在的被除数用现在的被除数12345减去减
9、去24585的结果,的结果,得到余数得到余数12345 12290551234567892458=?1234567892458=?从原被除数中乘余位补在余数上,并将余从原被除数中乘余位补在余数上,并将余数作为新的被除数,除数式变为:数作为新的被除数,除数式变为:5567892458?判断被除数是否小于除数,是则完成整除判断被除数是否小于除数,是则完成整除运算。运算。否则重复以上运算否则重复以上运算。人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。