高精度算法(超出范围的数值的计算)
来源:互联网 发布:阿里云服务器域名 编辑:程序博客网 时间:2024/06/07 19:50
一般我们可能会遇到超过范围的数的运算,直接定义进行计算,那么久可以通过高精度算法来实现。
高精度算法的实现步骤如下:读入,将数据储存到数组中,进行加减乘除的计算。
储存数据时注意的问题:
判断位数,由于这里是储存到字符串里面,故而数组的第一位可能是负号“-”, 此处可以用ASCII码来判断是不是等于45,标记,然后再读入数据转化为下标等于位数减一。(即下标0时是个位,这个到乘法时就会发现很奇妙了)
加法:
(1)上步判断并去掉了负号,加法时判断是否同号,若同号直接加,加法是用循环,一次循环中,当前位数的值为后一位的进位和这位的和对十取余,进位的值为和除十。这样可以把每一位求出来。(跟二进制加法器有点像额)
(2)如果不同号,那么就转化为减法运算。
减法:
(1)这里减法的计算到时比较简单,只涉及到借位的问题,大小判断,借位。但是最后判断符号的时候就要有点麻烦了,要考虑到加法转减法的情况,但是只要考虑清楚就没问题了。
乘法:
(1)乘法运算的最大位数是两个因数的位数和减一。
(2)乘法和加法的思路相似,但是要使用双层循环,同时下标有所改变,两个数乘积的下标等于两个下标和,然后在对十取余,进位是除以十。
除法:
(1)这个得用减法来模拟,用被除数减去除数的10的n次方倍,用最后一次大于0的结果减去n-1倍,依次类推,然后结果数组的下标的值就是n-1。
(2)实现是可以先判断除数,被除数数组的位数差,确定十的n次方的n,再进行计算。
代码打不打看有没有时间了。
0 0
- 高精度算法(超出范围的数值的计算)
- 超出类型范围的计算
- C语言超出类型数值范围的表示方法
- 超出范围的函数
- 超出long类型存储数值的超大计算
- float,double等表示的数值范围的计算
- 关于float,double等表示的数值范围的计算
- 类型的数值范围
- java基本类型(数值范围):浮点的底层表示定义,float计算快一些
- 超出数据类型范围的数的加法
- MySQL数值数据类型的范围
- 二进制的高精度计算
- java的高精度计算
- 高精度幂的计算
- 高精度幂的计算
- 美丽的高精度计算
- 显示器"超出同步范围"问题的解决办法!
- 数组超出了索引值的范围
- LintCode 不同的二叉查找树
- ccf 201509-4 高速公路
- alsa-lib的unable to create IPC shm instance问题的解决
- java中Inputstream,outputstream(字节输入输出流)
- 有关于__align(n)
- 高精度算法(超出范围的数值的计算)
- HDU 1081 To The Max DP
- Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define 解决
- 07_Java 多线程编程
- 为Arch Linux安装VMWare-Tools
- 队列
- 1.操作系统基础概念
- iso/osi七层模型
- 5.5编写一个程序,把一个指定的值存储到一个整数中指定的几个位。它的原型如下