高精度:加(正加正):
#include<cstdio>
#include<iostream>
using namespace std;
const int need=1000000;
int aa[need],bb[need];
string add_(string a,string b)
{
int lena=a.length(),lenb=b.length();
int len=max(lena,lenb),len2=min(lena,lenb);
for(int i=len2;i<=len+1;i++) aa[i]=bb[i]=0;
for(int i=1;i<=lena;i++) aa[i]=a[lena-i]-'0';
for(int i=1;i<=lenb;i++) bb[i]=b[lenb-i]-'0';
for(int i=1;i<=len;i++)
{
aa[i]+=bb[i];
aa[i+1]+=aa[i]/10;
aa[i]%=10;
}
if(aa[len+1]) len++;
string ans="";
for(int i=len;i>=1;i--) ans+=aa[i]+'0';
return ans;
}
int main()
{
string a,b;cin>>a;cin>>b;
cout<<add_(a,b);
}
高精度:减(正减正,结果可能为负):
#include<cstdio>
#include<iostream>
using namespace std;
const int need=100000;
int aa[need],bb[need];
string minus_(string a,string b)
{
if(a==b) return "0";
int lena=a.length(),lenb=b.length();
int len=max(lena,lenb),len2=min(lena,lenb);
bool mark=false;
if(lenb>lena||lenb==lena&&b>a)
{
swap(a,b);
swap(lena,lenb);
mark=true;
}
for(int i=len2;i<=len+1;i++) aa[i]=bb[i]=0;
for(int i=1;i<=lena;i++) aa[i]=a[lena-i]-'0';
for(int i=1;i<=lenb;i++) bb[i]=b[lenb-i]-'0';
for(int i=1;i<=len;i++)
{
aa[i]-=bb[i];
if(aa[i]<0)
{
aa[i+1]--;
aa[i]+=10;
}
}
while(len&&aa[len]==0) len--;
string ans=mark?"-":"";
for(int i=len;i>=1;i--) ans+=aa[i]+'0';
return ans;
}
int main()
{
string a,b;cin>>a>>b;
cout<<minus_(a,b);
}
大整数模取幂:
#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
int mod_(string a,int d)
{
int len=a.length(),ans=0;
for(int i=0;i<len;i++)
ans=((ll)ans*10+a[i]-'0')%d;
return ans;
}
int main()
{
string a;cin>>a;
int d;cin>>d;
printf("%d",mod_(a,d));
}