栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【c++入门(2)】高精度

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【c++入门(2)】高精度

Ⅰ整数高精度加法

问题描述:
小A正在学习斐波那契数列,小A想要知道斐波那契数列的第n项。
输入:一行,一个整数n。(n<=100)
输出:一行,一个整数,斐波那契数列的第n项。
输入样例1
99
输出样例1
218922995834555169026

这一题光看样例就发现会超long long,数据范围表简单列一下:

难道递推?

dp_fib[1]=1;
dp_fib[2]=1;
for(int i=3;i<=n;i++){
	dp_fib[i]=dp_fib[i-1]+dp_fib[i-2];
}cout< 

所以这样肯定是不可以的!
所以,我们可以在c++里模拟一个竖式来计算结果。

写一下,伪代码
int A[]=a;
int B[]=b;

假设正整数A的长度为n,正整数B的长度为m,那么A+B的长度最大为多少?最小为多少?
答:①max(n, m) + 1; ②max(n, m);
所以还是定位为②好一些,考虑道进位情况。
①高精度数的读取与存储:使用字符串方式读取,然后转换为整数,逆向存储到整型数组。
②高精度数的加法:通过数组下标模拟两个加数中每一个位上数的加法。

③去除前导0后,逆向输出。

Ⅱ任意进制的高精度加法
X进制高精度计算和十进制的区别:
①如果X>=10,需要在字符串转int数组的时候注意将其转换为10进制数
②进行取模和除法操作时,使用x进行取模和除法操作。
③如果X>=10,输出时注意将10进制数转换为相应进制的数。
Ⅲ Fib
Fib:
算法一:
将两个大整数的加法的计算写成一个子程序,
循环调用即可

算法二:
① a数组始终保存f[i-1]的值 b数组始终保存f[i-2]的值 c
数组保存f[i]的值,在循环中计算c数组的结果
② 将上一步计算结束后a数组的值拷贝给b数组,c数组
值拷贝给a数组,进行下一次循环

高精度减法

问题描述:
已知大正整数a和b,且a > b。 求a-b的值。

解题
①如果a[i] < b[i]:
模拟a[i]向a[i+1]借位:a[i+1]–; a[i] += 10;
②模拟减法:c[i] = a[i] – b[i];
如果a[i+1] == 0, 这样借位是否会出问题?
不会.因为最多借1位,即使a[i+1]被借位后等于-1,因为a>b, a[i+1]还可以向a[i+2]借位。借位后a[i+1]等于9,而b[i+1]最大为9。

①高精度数的读取存储:使用字符串方式读取,然后转成整型数组,为方便计算,进行逆向存储。
②模拟竖式进行减法:相同位置进行相减,不够减时进行借位
③去除前导0后,逆向输出。
两个正整数a和b, 且a>b,a的长度为n,b的长度为m,那么c = a-b最长为多少?当然是n
两个正整数a和b,如果判断a和b的大小?
(a.size() 如果a 交换a和b的值,后计算a-b,结果输出一个负号

Plus:
计算整数a+b的值,( -10^100 <= a, b <= 10^100);
![在这里插入图片描述](https://img-blog.csdnimg.cn/800b811503bf4c8c9148f4e97331029f.png
使用字符串读取,abs(x) 只需要将x前的负号去除即可。
定义bool型变量sum记录是否做加法,f记录结果是否是负数
模拟高精度加减法。如果f=true,在结果前输出’-’

高精度乘法

问题描述:
计算非闰年一年有多少个小时。

设整数A的长度为n,正整数B的长度为m,那么A ∗ B的长度最大为多少?最小为多少?
A ∗ B的长度最长不超过(n + m), 最短不会低于max(n,m)。
高精度×高精度
第一步:数据的读取和存储:
使用字符串读取大整数,然后将其转换为整型数组后逆序存储。
第二步:模拟乘法运算:
第三步:去除前置的0:
第四步:输出结果:
时间复杂度:O(mn);
Multiplication:
累加和的计算:sum = 0; sum = sum + x!;x ∈ [1,n] ;
由于结果会超出long long范围,使用高精度模拟计算乘法和加法。

高精度除法
第一步:数据的读取和存储:

第二步:模拟除法运算:

第三步:去除前置的0:

第四步:输出结果:

a最大10^10000 ,需要使用高精度存储,b[i]最大10000可以使用低精度存储,高精度÷低精度。

问题:该题牵涉到多次除法,是否每次除法后都需要去除前置0?
除了最后一次除法,其他可以不去除前置0,并不影响最终结果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号