高精度算法

高精度加法

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

输入样例

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;
}
相关推荐
dora5 分钟前
逼格提起来,使用curl发送网络请求
android·c++
yy_xzz9 分钟前
基于条码数据生成校验密码的C++实现方案
开发语言·c++
技术小白Byteman20 分钟前
蓝桥刷题note13(排序)
开发语言·数据结构·c++·学习·算法·visualstudio
老歌老听老掉牙21 分钟前
C++使用Qt Charts可视化大规模点集
c++·qt·信息可视化·点集
芜湖xin28 分钟前
【题解-Acwing】798. 差分矩阵
算法·差分
_星辰大海乀34 分钟前
二叉树相关练习--2
java·开发语言·数据结构·算法·链表·idea
一只拉古35 分钟前
掌握扫描线(sweep line)算法:从LeetCode到现实应用
算法·leetcode·面试
OneQ66638 分钟前
C++自学笔记——动态创建对象
c++·笔记·算法
梭七y41 分钟前
【力扣hot100题】(064)在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Dream it possible!42 分钟前
LeetCode 热题 100_完全平方数(84_279_中等_C++)(动态规划(完全背包))
c++·leetcode·动态规划·完全背包