PAT-A 真题 – 1023 Have Fun with Numbers

发布于 / PAT-甲级 / 0 条评论

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位),将其乘以2,判断结果的数字是否和原来数字的排列一致。一致输出Yes,不一致输出No。

无论一不一致,均输出乘以2后的结果。

注释写的比较清晰,这里不做过多解释了

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int main(){
  //num存放读入的数字,ans存放*2后结果,tmp存放临时排序用的数组 
  char num[21], ans[21] = {0}, tmp[21];
  cin >> num;
  //jinwei存放进位,len存放长度 
  int jinwei= 0, len = strlen(num);
  for(int i = len - 1; i >= 0; i--){
    int n = num[i] - '0';
    n = n * 2 + jinwei;
    jinwei = n / 10;
    ans[i] = n % 10 + '0';
  }
  //最后仍有进位,排列一定不一样 
  if(jinwei)
    cout << "No" << endl << jinwei;
  else{
    //排序然后判断两个串是否一样 
    strcpy(tmp, ans);
    sort(tmp, tmp + len);
    sort(num, num + len);
    if(!strcmp(tmp, num)) cout << "Yes" << endl;
    else cout << "No" << endl;
  }
  cout << ans;
  return 0;
}

转载原创文章请注明,转载自: 斐斐のBlog » PAT-A 真题 – 1023 Have Fun with Numbers
目前还没有评论,快来抢沙发吧~