高精度!!!

代码来源@

高精度加法

//高精度加法代码精简版
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;//1005; 常量 
char a[N],b[N];
int c[N];
int main() {
	cin>>a>>b;
	int ka=strlen(a)-1,kb=strlen(b)-1,kc=0;
	//三个模拟指针,ka,kb分别指向a,b数组最高位,kc指向c数组最低位 
	while(ka>=0 || kb>=0){//只要还没加完 
		if(ka>=0)c[kc]+=a[ka--]-'0';//a[ka]没有加完则加入c[kc]中 
		if(kb>=0)c[kc]+=b[kb--]-'0';//同理,a[kb]合法则加入c[kc]中 
		c[kc+1]+=c[kc]/10;c[kc]%=10;//同时检查c[kc]进位给高位 
		kc++; //kc后移一位 
	}
	if(!c[kc])kc--;//判断高位是否有数 
	for(int i=kc;i>=0;i--)cout<<c[i];
	return 0;
}

高精度减法

//高精度减法
#include <bits/stdc++.h>
using namespace std;
string aa,bb;
bool flag=0;//默认符号为正数 
int a[1005],b[1005],c[1005];
void look(int x[],int k){
	cout<<endl;
	for(int i=0;i<=k;i++){
		cout<<x[i]<<" ";
	}
	cout<<endl;
}
int main() {
	cin>>aa>>bb;
	int la=aa.size(),lb=bb.size();
	//确保a>b;
	if(la<lb || (la==lb&&aa<bb)){
		flag=1;//flag为1说明结果为负数 
		swap(aa,bb);
		swap(la,lb);
	}

	for(int i=0;i<la;i++)//aa转为int倒序存储 
		a[i]=aa[la-i-1]-'0';
	
	for(int i=0;i<lb;i++)//bb转为int倒序存储
		b[i]=bb[lb-i-1]-'0';
	
	for(int i=0;i<la;i++){//逐位相减 
		c[i]=a[i]-b[i];
	}
	
	for(int i=0;i<la;i++){//检查借位 
		if(c[i]<0){
			c[i+1]--;
			c[i]+=10;
		}
	}
	
	int lc=la; 
	while(lc>0 && !c[lc])lc--;//删除前导0 
	
	if(flag)cout<<"-";
	for(int i=lc;i>=0;i--) cout<<c[i];
	return 0;
}

高精度乘法

//高精度乘法带符号
#include <bits/stdc++.h>
using namespace std;
string aa,bb;
int flaga=1,flagb=1;//默认符号为正数 
int a[1005],b[1005],c[1005];

int main() {
	cin>>aa>>bb;
	
	//特判符号部分 
	if(aa[0]=='-'){
		flaga=-1;//符号标记 
		aa.erase(0,1);//删除符号 
	};
	if(bb[0]=='-'){
		flagb=-1;//符号标记 
		bb.erase(0,1);//删除符号 
	};
	//特判符号部分 
	
	int la=aa.size(),lb=bb.size(),lc=la+lb;
	
	for(int i=0;i<la;i++)//aa转为int倒序存储 
		a[i]=aa[la-i-1]-'0';
		
	for(int i=0;i<lb;i++)//bb转为int倒序存储
		b[i]=bb[lb-i-1]-'0';

	for(int i=0;i<la;i++){
		for(int j=0;j<lb;j++){//逐位相乘 
			c[i+j]+=a[i]*b[j];
		}
	}
	
	for(int i=0;i<lc;i++){//处理进位 
		c[i+1]+=c[i]/10;
		c[i]%=10;;
	}

	while(lc>0 && !c[lc])lc--;//删除前导0 
	
	if(flaga*flagb<0)cout<<'-';//输出符号 
	for(int i=lc;i>=0;i--) cout<<c[i];
	return 0;
}

高精度除法

//高精度除以单精度
#include <bits/stdc++.h>
using namespace std;
string aa;
bool flag=0;//默认符号为正数 
long long a[1005],b,c[1005],r,pc=0;
int main() {
	cin>>aa>>b;
	int la=aa.size(),lc=la;
	
	for(int i=0;i<la;i++)//aa转为int倒序存储 
		a[i]=aa[i]-'0';
	
	for(int i=0;i<la;i++){
		c[i]=(r*10+a[i])/b;
		r=(r*10+a[i])%b;
	}
	
	while(pc<la && !c[pc])pc++;//删除前导0 
	
	for(int i=pc;i<lc;i++) cout<<c[i];
	//cout<<endl<<r;//输出余数
	return 0;
}