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
题目大意
给你⼀个⻓度不超过20的整数N,求这个整数两倍后的数位是否为原数位的⼀个不重复排列。是输出Yes,否输出N哦,最后换行输出N乘二后的积
思路
数组模拟即可
C/C++
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int nums[22]={0},len=0,result[10]={0};
cin >> s;
for(int z=s.size()-1;z>=0;z--){
int num = s[z]-48;
result[num]++;
nums[len] += num * 2;
if(nums[len]>9){
nums[len+1] = 1;
nums[len]%=10;
}
result[nums[len]]--;
len++;
}
bool flag = true;
if(nums[len]!=0) flag = false , len++;
for(int z : result) if(z!=0) flag = false;
puts((flag?"Yes":"No"));
for(int z=len-1;z>=0;z--) cout << nums[z];
return 0;
}