Peter算法小课堂—高精度乘法

文章讲述了高精度算法在乘法中的应用,比较了PlanA和PlanB的优劣,并介绍了如何处理阶乘问题(包括小数据和大数据版本),以及Hanoi双塔问题的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 给大家看个小视频13 高精度算法 乘法_哔哩哔哩_bilibili

乘法竖式

大家觉得Plan A好,还是Plan B好呢(对于计算机来说)?那显然是B啦

x*y问题

mul思路:mul()函数返回x数组乘y数组的积,保存在z数组。根据上图Plan B,第一层循环枚举y数组长度次,每一次(第二层循环)遍历y数组每个元素的值,然后加a数组(需要使用高精度加法Peter算法小课堂—高精度加法-优快云博客

易错点:1.删去前导0

               2.字符串转数字要-‘0’

main()

int x[SIZE],y[SIZE],z[SIZE];
int main(){
	string s1,s2;
	cin>>s1>>s2;
	converts(x,s1);
	converts(y,s2);
	mul(z,x,y);
	print(z);
	return 0;
}

感觉看懂思路了,这应该能自己写吧……

mul()

void mul(int *c,int *a,int *b){
	converts(c,"0");//化0
	for(int i=0;i<SIZE;i++)//枚举b数组个数次
		for(int j=0;j<b[i];j++)//遍历b数组每个元素的值
			add(c+i,a,SIZE-i);//相加,高精度加法
}

大家应该能看懂吧

P1009 [NOIP1998 普及组] 阶乘之和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 这道题,首先分析大小数据。敲一下计算器得差不多当n<=20时,是不用高精的。

所以这题我们使用大小数据分离一方法。

小数据

#include <bits/stdc++.h>
using namespace std;
int n;
int main(){
	cin>>n;
	long long ans=0;
	long long f=1;
	for(int i=1;i<=n;i++){
		f*=i;
		ans+=f;
	}
	cout<<ans<<endl;
}

大数据

先讲讲如何判断小数据和大数据吧

int solve2(){
	converts(ans,"0");
	converts(f,"1");
	for(int i=1;i<=n;i++){
		mul(f,i);
		add(ans,f);
	}
	print(ans);
	return 0;
}

 P1096 [NOIP2007 普及组] Hanoi 双塔问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

大家思考思考吧,答案发在评论区 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值