| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我已经把所有数据都测试并通过了,但提交还是WA。哪位高手帮忙看看??#include <iostream>
#include <string>
using namespace std;
void add(string& num1,int index,char data)
{
if(index<0)
num1.insert(num1.begin(),data);
else
{
if(data=='1')
{
if(num1.at(index)=='1')
{
if(index==(num1.size()-1))
{
num1[num1.size()-1]='0';
add(num1,num1.size()-2,'1');
}
else
{
num1[index]='0';
if(index<num1.size()-2)
add(num1,index+2,'1');
else
add(num1,num1.size()-1,'1');
add(num1,index-1,'1');
}
}
else
num1[index]='1';
}
}
}
void changeToCanonical(string& num)
{
if(num.size()<2)
return;
bool out=false;
while(!out)
{
out=true;
for(int i=num.size()-1;i>0;i--)
{
if(num.at(i)=='1'&&num.at(i-1)=='1')
{
num[i]='0';
num[i-1]='0';
if(i>1)
{
if(num[i-2]=='0')
num[i-2]='1';
else
{
add(num,i-2,'1');
out=false;
break;
}
}
else
num.insert(num.begin(),'1');
}
}
}
}
void removeLeadZear(string& num)
{
if(num.size()>1)
{
while(num.at(0)=='0'&&num.size()>1)
num.erase(0,1);
}
}
int main()
{
int space, i, j;
string num1, num2, result;
while(cin>>num1>>num2)
{
removeLeadZear(num1);
removeLeadZear(num2);
changeToCanonical(num1);
changeToCanonical(num2);
result=num1;
for(i=num2.size()-1,j=result.size()-1;i>=0;i--,j--)
add(result,j,num2.at(i));
changeToCanonical(result);
space=2+result.size()-num1.size();
for(i=0;i<space;i++)
cout<<" ";
cout<<num1<<endl;
cout<<"+";
space=1+result.size()-num2.size();
for(i=0;i<space;i++)
cout<<" ";
cout<<num2<<endl;
cout<<" ";
for(i=0;i<result.size();i++)
cout<<"-";
cout<<endl<<" "<<result<<endl<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator