高精度计算之基础
来源:互联网 发布:李涛疯狂淘宝上市 编辑:程序博客网 时间:2024/06/08 16:16
在使用计算机进行计算时,精度提高了,但有时会计算一些很大的数,它们超出了C++中定义的数据类型,
所以,我们要用一些技巧来计算它们。
基础:
高精度数一般都是成百上千位的,位数不会确定。
首先,我们要明确:高精度数在C++中没有定义,我们需要自己编写程序来计算!!!
大家现在回忆一下所学的计算知识,就可以发现,我们在小学所学的竖式计算,是很容易计算不定长度的两数相加、减、乘、除(虽然没有计算器方便)。
我们就可以顺着这个思路走下去,以下是细节方面。
读入:
上面已经说过原因,所以,我们读入必须使用字符串,再转到整型数组。
注意:
我们为了在计算时末位对齐,除了高精除低精之外,都采用倒序存储。
void Scan(int a[]){ string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0';}
除此之外,我们也可以使用循环加数组的方法来读入(代码请读者自己去想)。
输出:
因为我们在存高精度数时,除高精除低精之外,均采用倒序存储。
所以,我们在输出时要采用倒序输出。
void Print(int a[]){ for(int i=a[0];i>=1;i--) cout<<a[i]; cout<<endl;}
进位与借位的处理:
前面已经介绍过了,由于高精度数的加、减 、乘、除都是模拟小学我们所学过的竖式计算,所以,只要你发挥你的想象力,你就可以得出下面的所有代码。
加法:
c[i]=a[i]+b[i];if(c[i]>10){c[i]%=10;c[i+1]++;}
减法:
if(a[i]<b[i]){a[i+1]--;a[i]+=10;}c[i]=a[i]-b[i];
乘法:
这里先给出高精乘高精的进位法。
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];x=c[i+j-1]/10;c[i+j-1]%=10;
除法:
除法是由减法与乘法模拟实现的,所以,我们可以使用减法和乘法来实现除法代码
基础部分到此结束,在下一节中,我们将学习高精度加法
阅读全文
2 0
- 高精度计算之基础
- 高精度计算之加法
- 高精度基础之加法
- 蓝桥杯:基础练习 阶乘计算 高精度加法
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- 高精度计算
- JAVA——IO流 之 节点流和处理流以及流的关闭顺序(5)
- Java中字符串截取使用
- 服务器测试包含的主要测试
- Strings Homomorphism
- xml文件的生成和解析
- 高精度计算之基础
- 全码倍数搜索
- CIFAR-10数据集可视化二进制版本
- Android Studio项目用Git上传至码云(OSChina)
- POJ225 Dungeon Master BFS
- HTML5中的canvas
- 输入一个数num,编程输出有几对质数的和等于num,
- Android studio cmake报错
- 两数组的交