题目描述
两大数相加
blablabla
C++ 代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <math.h>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=1e5+10;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=633;
struct node
{
int len;
int d[MAX];
node()
{
len=0;
memset(d,0,sizeof(d));
}
};
node change(string s)
{
node a;
a.len=s.size();
for(int i=0;i<s.size();i++)
{
a.d[i]=s[s.size()-1-i]-'0';
}
return a;
}
void print(node a)
{
for(int i=a.len-1;i>=0;i--)
{
cout<<a.d[i];
}
}
node add(node a,node b)
{
node c;
int carry=0;
for(int i=0;i<a.len||i<b.len;i++)
{
int temp=a.d[i]+b.d[i]+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0)
c.d[c.len++]=carry;
return c;
}
int main()
{
string a,b;
cin>>a>>b;
node x=change(a);
node y=change(b);
print(add(x,y));
return 0;
}
可以跑了。但上面的模板,在模拟高精度减法的时候会炸内存,,数组不能开到1e5,最多到1e4,不晓得为啥,过不了,就采用y总的模板了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <math.h>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=1e4+10;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=633;
vector<int> add(vector<int>&a,vector<int>&b)
{
vector<int>c;
int t=0;
for(int i=0;i<a.size()||i<b.size();i++)
{
if(i<a.size())t+=a[i];
if(i<b.size())t+=b[i];
c.push_back(t%10);
t/=10;
}
if(t)c.push_back(t);
return c;
}
int main()
{
string a,b;
cin>>a>>b;
vector<int>A,B;
for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
vector<int> c;
c=add(A,B);
for(int i=c.size()-1;i>=0;i--)
cout<<c[i];
return 0;
}