64,282
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
int main()
{
int c,k=0,f,a,sum,s; //f表示进位否,C表示一共有几次计算,sum表示,当前V1的数与当前V2的数相加的和
char ss1[80],ss2[80],cc;//Cc表示从S1,S2中提取的单个字符
cin>>c;
while(1)
{
f=0;
s=0;
vector<int> v1,v2,v3;
string s1,s2,s3;
scanf("%s",ss1);
scanf("%s",ss2);
s1=ss1;
s2=ss2;
string::iterator sit1,sit2;
for(sit1=s1.begin();sit1!=s1.end();sit1++)
{
cc=(*sit1);
sscanf(&cc,"%d",&a);//把字符转成数字
if(a==0 &&s==0) //表示前面0如0000009
continue;
else
{
v1.push_back(a);
s=1; //表示前面没有0了
}
}
s=0;
for(sit2=s2.begin();sit2!=s2.end();sit2++)
{
cc=(*sit2);
sscanf(&cc,"%d",&a);
if(s==0 && a==0)
continue;
else
{
v2.push_back(a);
s=1;
}
}
std::reverse(v1.begin(),v1.end());//翻转
std::reverse (v2.begin(),v2.end());
vector<int>::iterator vit,vit2;
for(vit=v1.begin(),vit2=v2.begin();;)
{
sum=0;
if(vit==v1.end()&&vit2!=v2.end())//如果V1向量到底了,V2却没有
{
if(f==0)
v3.push_back(*vit2);//如果没有进位
else if(f==1)
{
if(*vit2+1<10)
{
v3.push_back(*vit2+1); // 如果进位
f=0;
}
else //如果大于10 F=1
{
v3.push_back(*vit2-10+1);
f=1;
}
}
vit2++;
if(vit2==v2.end()&&f==1) //如果连V2也到底了,那就结束FOR
{
v3.push_back(1);
f=0;
}
if(vit2==v2.end()&&f==0)
break;
else
continue;//否则就再循环
}
else if(vit2==v2.end() && vit!=v1.end())//与上面相反
{
if(f==0)
v3.push_back(*vit);
else
{
if(*vit+1<10)
{
v3.push_back(*vit+1);
f=0;
}
else
{
v3.push_back(*vit-10+1);
f=1;
}
}
vit++;
if(vit==v1.end()&&f==1)
{
v3.push_back(1);
f=0;
}
if(vit==v1.end()&&f==0)
break;
else
continue;
}
else if(vit==v1.end() && vit2==v2.end())
break;
if(f==0)//如果V1,V2相对应的有数,那么就相加
{
if(*vit+*vit2>=10)
{
sum=*vit+*vit2;
f=1;
v3.push_back(sum-10);
}
else
{
sum=*vit+*vit2;
f=0;
v3.push_back(sum);
}
}
else if(f==1)
{
if(*vit+*vit2+1>=10)
{
sum=*vit+*vit2;
f=1;
v3.push_back(sum-10+1);
}
else
{
sum=*vit+*vit2;
f=0;
v3.push_back(sum+1);
}
}
if(vit==v1.end()-1 && vit2==v2.end()-1 && f==1)//如果都到底了,但是F有进位,V3再赋一个1
v3.push_back(1);
vit++;
vit2++;
}
std::reverse(v1.begin(),v1.end());//因为刚才为了相加而翻转了,现在为了输同,要翻转过来
std::reverse (v2.begin(),v2.end());
std::reverse(v3.begin(),v3.end());//因为V1,V2是倒着加的,V3是顺着赋值的,所以要得到正确答案,V3要翻转
vector<int>::iterator vit3;
cout<<"Case "<<k+1<<":"<<endl;
for(vit=v1.begin();vit!=v1.end();vit++)
cout<<*vit;
cout<<" + ";
for(vit2=v2.begin();vit2!=v2.end();vit2++)
cout<<*vit2;
cout<<" = ";
for(vit3=v3.begin();vit3!=v3.end();vit3++)
cout<<*vit3;
k++;
if(k==c)
break;
else
cout<<endl<<endl;
}
}