高精度加法
输入两个数,输出他们的和(高精度)
输入样例
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;
}