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
AC 代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string s;
cin >> s;
string tmp = "";
int jinwei = 0;
for (auto i = s.rbegin(); i != s.rend(); i++)
{
int num = (*i - '0') * 2 + jinwei;
jinwei = num / 10;
tmp += num % 10 + '0';
}
string ret = tmp;
sort(s.begin(), s.end());
sort(tmp.begin(), tmp.end());
if (!jinwei && tmp == s)
cout << "Yes" << endl;
else
cout << "No" << endl;
if(jinwei)
ret+='1';
reverse(ret.begin(), ret.end());
cout << ret;
return 0;
}
评价:比柳诺短,不过也没什么可说的,她基本没怎么用标准库函数。
核心就是编写代码仿照整数乘2的效果,保存在另一个字符串中,然后用sort函数判断是否符合条件,有一个注意的,如果处理完每一位之后,jinwei等于1,代表着这个被乘数>500000(若干0)这样乘2之后是不可能符合条件的