高精度算法

发布于:2025-04-08 ⋅ 阅读:(32) ⋅ 点赞:(0)

高精度加法

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

输入样例

111111111111111111111111111111 222222222222222222222222222222

输出样例

333333333333333333333333333333

#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

#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

#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;
}


网站公告

今日签到

点亮在社区的每一天
去签到