1023 Have Fun with Numbers
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line “Yes” if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or “No” if not. Then in the next line, print the doubled number.
Sample Input:
1234567899
Sample Output:
Yes
2469135798
#include <bits/stdc++.h>
using namespace std;
vector<int> a,c,d;
int ans[100];
vector<int> mul(vector<int> a,int b)
{
int t=0;
for(int i=0;i<a.size();i++){
t+=a[i]*2;
c.push_back(t%10);
t/=10;
}
while(t){
c.push_back(t%10);
t/=10;
}
return c;
}
int main()
{
int b=2;
string s;
cin>>s;
for(int i=s.length()-1;i>=0;i--){
a.push_back(s[i]-'0');
}
c=mul(a,b);
for(int i=0;i<c.size();i++){
d.push_back(c[i]);
}
for(int i=1;i<=a.size()-1;i++){
for(int j=0;j<a.size()-i;j++){
if(a[j]>a[j+1]){
int temp1=a[j];
a[j]=a[j+1];
a[j+1]=temp1;
}
}
}
for(int i=1;i<=c.size()-1;i++){
for(int j=0;j<c.size()-i;j++){
if(c[j]>c[j+1]){
int temp2=c[j];
c[j]=c[j+1];
c[j+1]=temp2;
}
}
}
int len1=a.size();
int len2=c.size();
for(int i=0;i<len1&&i<len2;i++){
if(a[i]!=c[i]){
cout<<"No\n";
for(int i=d.size()-1;i>=0;i--){
cout<<d[i];
}
return 0;
}
}
cout<<"Yes\n";
for(int i=d.size()-1;i>=0;i--){
cout<<d[i];
}
return 0;
}