//没有考虑负数,合在一起,可以实现人员正负数的加减乘数。
void large_add(vector<int> &vec2,vector<int> &vec1)
{
if(vec1.size()<vec2.size())
swap(vec1,vec2);
int c=0;
for(int i=0;i<vec2.size();i++)//vec2保存的是交小的数
{
vec1[i]=vec1[i]+vec2[i]+c;
if(vec1[i]>=10)
{
vec1[i]=vec1[i]%10;
c=1;
}
else
c=0;
}//主要计算的,好像都已经结束了,只需要做相对应的特殊情况的判断即可。
if(c==1)
{
if(vec1.size()==vec2.size())
vec1.push_back(c);
else
vec1[vec2.size()]++;
}
}
int main()
{
// GraphAdjList *G=new GraphAdjList;
// freopen("C:/data/data.txt", "r", stdin);
// CreateGraph(G);
//图创建成功,剩下的是插入,节点,重新构建新的图。
//然后就是图的遍历
//图的基本算法。
// cout << G->numVertexes << endl;
// cout << G->numEdges <<endl;
string s1,s2;
cin>>s1>>s2;
//先写出主要功能
vector<int> vec1,vec2;//假设s1位数大于s2位数
for(int i=s1.size()-1;i>=0;i--)
vec1.push_back(s1[i]-'0');
for(int i=s2.size()-1;i>=0;i--)
vec2.push_back(s2[i]-'0');
bool flag=true;
if(s1.size()<s2.size())
{
swap(vec1,vec2);
flag=false;
}
else if(s1.size()==s2.size())
{
for(int i=0;i<s1.size();i++)
{
if(s1[i]>s2[i])
break;
else if(s1[i]<s2[i])
{
flag=false;
swap(vec1,vec2);
break;
}
}
}//选出大的数,然后用大的减去小的。
//确定了两个数的大小之后,此方法计算,是没有问题的。
//大数相乘,可以表示为先个位数与多位数相乘,然后执行大数相加,将结果相加。
vector<int> temp;
for(int i=0;i<vec2.size();i++)//vec2保存的是交小的数
{
int c=0;
int t=0;
vector<int> tpv;
for(int j=0;j<i;j++)
tpv.push_back(0);
for(int j=0;j<vec1.size();j++)
{
t=vec1[j]*vec2[i]+c;
c = t / 10;
if(t>=10)
tpv.push_back(t%10);
else
tpv.push_back(t);
}
if (c != 0)
tpv.push_back(c);
large_add(tpv,temp);//大数相加,结果保存于temp中,且tvp一定比temp大。
}//主要计算的,好像都已经结束了,只需要做相对应的特殊情况的判断即可。
for(int i=temp.size()-1;i>=0;i--)
cout<<temp[i];//最后打印出temp的值。
system("pause");
return 0;
}