水题,这个数用字符串表示,在模拟*2
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
map<char,int> dm;
map<int,char> im;
string n1;
vector<char> n2,n3;
void printN2()
{
vector<char>::iterator it;
for(it=n3.begin();it!=n3.end();it++)
cout<<*it;
cout<<endl;
}
int main()
{
for(int i=0;i<10;i++)
{
dm['0'+i]=i;
im[i]='0'+i;
}
cin>>n1;
//*2
int tmp;
int carry=0;
string::reverse_iterator rsit;
for(rsit=n1.rbegin();rsit!=n1.rend();rsit++)
{
tmp=(dm[*rsit]) *2+carry;
if(tmp>9)
{
carry=tmp/10;
tmp%=10;
}
else
carry=0;
n2.push_back(im[tmp]);
}
if(carry!=0)
n2.push_back(im[carry]);
n3.assign(n2.rbegin(),n2.rend());
//check permutation
vector<char>::iterator cit;
if(n1.length()!=n2.size())
{
cout<<"No"<<endl;
printN2();
}
else
{
for(rsit=n1.rbegin();rsit!=n1.rend();rsit++)
{
cit=find(n2.begin(),n2.end(),*rsit);
if(cit!=n2.end())
{
*cit='f';//found
}
else
{
cout<<"No"<<endl;
printN2();
return 0;
}
}
cout<<"Yes"<<endl;
printN2();
}
return 0;
}