加法

#include<iostream>
using namespace std;
string sa,sb;
int a[10005],b[10005],c[10005];
int main(){
    cin>>sa>>sb;
    int al=sa.size(),bl=sb.size(),cl=max(al,bl);
    for(int i=0;i<al;i++)a[al-i-1]=sa[i]-'0';
	for(int i=bl-1,j=0;i>=0;i--,j++)b[j]=sb[i]-'0';
	for(int i=0;i<cl;i++)c[i]=a[i]+b[i];
	for(int i=0;i<cl;i++)if(c[i]>9)c[i+1]+=c[i]/10,c[i]=c[i]%10;
	if(c[cl])cl++;
	for(int i=cl-1;i>=0;i--)cout<<c[i];
}
return 0;

减法

#include<iostream>
using namespace std;
string aa,bb;
bool flag=0;
int a[1005],b[1005],c[1005];
int main(){
	cin>>aa>>bb;
	int la=aa.size(),lb=bb.size();
	if(la<lb||(la==lb&&aa<bb)){
		flag=1;
		swap(aa,bb),swap(la,lb);
	}
	for(int i=0;i<la;i++)a[i]=aa[la-i-1]-'0';
	for(int i=0;i<lb;i++)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--;
	if(flag)cout<<"-";
	for(int i=lc;i>=0;i--)cout<<c[i];
	return 0;
}

乘法

#include<iostream>
using namespace std;
string aa,bb;
int flaga=1,flagb=1,begina,beginb,a[1005],b[1005],c[1005];
int main(){
	cin>>aa>>bb;
	int la=aa.size(),lb=bb.size(),lc=la+lb;
	if(aa[0]=='-')flaga=-1,begina=1;
	if(bb[0]=='-')flagb=-1,beginb=1;
	for(int i=begina;i<la;i++)a[i-begina]=aa[la-i-1+begina]-'0';
	for(int i=beginb;i<lb;i++)b[i-beginb]=bb[lb-i-1+beginb]-'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--;
	if(flaga*flagb<0)cout<<'-';
	for(int i=lc;i>=0;i--)cout<<c[i];
	return 0;
}

高精度除以单精度

#include<iostream>
#include<cstring>
using namespace std;
char s[110];
int a[110],c[110],x=0,b,len,i,p;
int main(){
	cin>>s>>b;
	len=strlen(s);
	for(i=0;i<len;i++)a[i]=s[i]-'0';
	for(i=0;i<len;i++)c[i]=(x*10+a[i])/b,x=(x*10+a[i])%b;
	p=len-1;
	for(i=0;i<len;i++)if(c[i]!=0){p=i;break;}
	for(i=p;i<len;i++)cout<<c[i];
}

阶乘

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX_DIGITS=40000;
int main(){
    int N,carry=0,factorial[MAX_DIGITS]={0};
    cin>>N;
    if(N<0)return 1;
    if(N==0||N==1){
        cout<<"1";
        return 0;
    }
    factorial[0]=1;
    int current_length=1;
    for(int i=2;i<=N;++i){
        for(int j=0;j<current_length;++j){
            int product=factorial[j]*i+carry;
            factorial[j]=product%10,carry=product/10;
        }
        while(carry>0)factorial[current_length]=carry%10,carry/=10,current_length++;
    }
    for(int i=current_length-1;i>=0;--i)cout<<factorial[i];
    return 0;
}