高精度算法

高精度加法

输入两个数,输出他们的和(高精度)

输入样例

111111111111111111111111111111 222222222222222222222222222222

输出样例

333333333333333333333333333333

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

string a,b;
int aa[510],bb[510];
int c[510];


int main()
{
	
	cin>>a>>b;
	int la = a.size();
	int lb = b.size();
	for(int i = la-1;i>=0;i--)
	{
		aa[la-1-i] = a[i]-'0';
	}
	for(int i = lb-1;i>=0;i--)
	{
		bb[lb-1-i] = b[i]-'0';
	}
	
	for(int i = 0;i<max(la,lb);i++)
	{
		c[i] = aa[i]+bb[i];
	}
	for(int i = 0;i<max(la,lb);i++)
	{
		if(c[i]>=10)
		{
			c[i+1]++;
		}
		c[i] = c[i]%10;
	}
	
	
	for(int i = max(la,lb);i>=0;i--)
	{
		if(i==max(la,lb))
		{
			if(c[i]!=0) cout<<c[i];
		}
		else cout<<c[i];
	}
	
	
	return 0;
}

高精度减法

输入两个数,输出他们的差(高精度)

输入样例

333333333333333333333333333333 222222222222222222222222222222

输出样例

111111111111111111111111111111

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

string a,b;
int aa[10090],bb[10090];
int c[10090];


int main()
{
	
	cin>>a>>b;
	int la = a.size();
	int lb = b.size();
	for(int i = la-1;i>=0;i--)
	{
		aa[la-i] = a[i]-'0';
	}
	for(int i = lb-1;i>=0;i--)
	{
		bb[lb-i] = b[i]-'0';
	}
	int jin = 0;
	bool fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff = false;
	if(la>lb)
	{
		fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff = true;
	}
	else if(la==lb)
	{
		for(int i = 0;i<la;i++)
		{
			if(a[i]>b[i])
			{
				fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff = true;
				break;
			}
			if(a[i]<b[i]) break;
		}
	}
	if(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff==true)
	{
		for(int i = 1;i<=max(la,lb)+1;i++)
		{
			
			int ccc = aa[i]-bb[i];
			c[i] = ccc%10;
			if(jin==1)
			{
				c[i]--;
				jin = 0;
				if(c[i]<0)
				{
					c[i] = (10+c[i])%10;
					jin = 1;
				}
			}
			if(c[i]<0)
			{
				c[i] = (10+c[i])%10;
				jin = 1;
			}
			if(ccc<0) jin = 1;
//			cout<<i<<" "<<aa[i]<<" "<<bb[i]<<" "<<c[i]<<endl;
			
		}
	}
	else
	{
		for(int i = 1;i<=max(la,lb)+1;i++)
		{
			
			int ccc = bb[i]-aa[i];
			c[i] = ccc%10;
			if(jin==1)
			{
				c[i]--;
				jin = 0;
				if(c[i]<0)
				{
					c[i] = (10+c[i])%10;
					jin = 1;
				}
			}
			if(c[i]<0)
			{
				c[i] = (10+c[i])%10;
				jin = 1;
			}
			if(ccc>=10) jin = 1;
//		cout<<i<<" "<<aa[i]<<" "<<bb[i]<<" "<<c[i]<<endl;
			
		}
	}
	if(c[0]==0&&c[1]==0&&c[3]==0&&c[4]==0&&c[5]==0&&c[6]==0&&c[7]==0&&c[8]==0&&c[9]==0&&c[10]==0&&c[11]==0&&c[12]==0&&c[13]==0&&c[15]==0)
	{
		cout<<0;
		return 0;
	}
	if(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff==false) cout<<"-";
	for(int i = max(la,lb)+1;i>=1;i--)
	{
		if(i==max(la,lb)+1)
		{
			if(c[i]!=0) cout<<c[i];
		}
		else cout<<c[i];
	}
	
	
	return 0;
}

高精度乘法

输入两个数,输出他们的积(高精度)

输入样例

11 11

输出样例

121

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

string a,b;
int aa[2010],bb[2010];
int c[4020];


int main()
{
	
	
	cin>>a>>b;
	if(a=="0"||b=="0")
	{
		cout<<0;
		return 0;
	}
	int la = a.size();
	int lb = b.size();
	for(int i = la-1;i>=0;i--)
	{
		aa[la-i] = a[i]-'0';
	}
	for(int i = lb-1;i>=0;i--)
	{
		bb[lb-i] = b[i]-'0';
	}
	for(int i = 1;i<=lb;i++)
	{
		for(int j = 1;j<=la;j++)
		{
			c[j+i-1] += aa[j]*bb[i];
		}
	}
//	for(int i = 1;i<=la+lb;i++)
//	{
//		cout<<i<<" "<<c[i]<<endl;
//	}
//	cout<<endl<<endl<<endl;
	int jin = 0;
	for(int i = 1;i<=la+lb;i++)
	{
		int ccccc = c[i]+jin;
		c[i] = ccccc%10;
		jin = ccccc/10;
	}
	
	for(int i = la+lb;i>=1;i--)
	{
		if((i==la+lb&&c[i]!=0)||i!=la+lb)
		{
			cout<<c[i];
		}
	}
	
	return 0;
}
相关推荐
GreenTea35 分钟前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
码匠许师傅44 分钟前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
fqq32 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
小小龙学IT2 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
知无不研4 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
2501_906565124 小时前
数学之美探究
算法
oier_Asad.Chen4 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
C++ 老炮儿的技术栈5 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
leisoo80976 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene7 小时前
C++:类和对象(上)
开发语言·c++