L_Aster的专栏

相逢的人会再相逢

1023. Have Fun with Numbers (20)

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 file 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;
string doubleNums(const string &nums)
{
    string results;
    int n=nums.size(),add=0;
    for(int i=0;i<n;++i)
    {
        results+='0'+((nums[n-1-i]-'0')*2+add)%10;
        add=((nums[n-1-i]-'0')*2+add)/10;
    }
    if(add>0) results+='0'+add;
    reverse(results.begin(),results.end());
    return results;
}
bool judgeNums(string &a,string &b)
{
    vector<int> counts(10,0);
    for(char x:a) counts[x-'0']++;
    for(char x:b) counts[x-'0']--;
    for(int x:counts) if(x) return false;
    return true;
}
int main()
{
    string nums,results;
    cin>>nums;
    results=doubleNums(nums);
    if(judgeNums(nums,results)) cout<<"Yes\n";
    else cout<<"No\n";
    cout<<results;
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gl486546/article/details/52354736
个人分类: PAT(甲级)
所属专栏: PAT题解
上一篇1019. General Palindromic Number (20)
下一篇1003. 我要通过!(20)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭