【PAT甲级】1023 Have Fun with Numbers (20 分)

题意:

输入一个不超过20位的正整数,问乘2以后是否和之前的数组排列相同(数字种类和出现的个数不变),输出Yes或No,并输出乘2后的数字。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int vis[17];
 5 string s;
 6 int ans[57];
 7 int main(){
 8     cin>>s;
 9     int len=s.size();
10     for(int i=len-1;i>=0;--i)
11         ++vis[s[i]-'0'];
12     int cnt=0;
13     int x=0;
14     for(int i=len-1;i>=0;--i){
15         x=(s[i]-'0')*2;
16         if(ans[cnt+1]+x%10>9){
17             ans[++cnt]+=x%10-10;
18             ++ans[cnt+1];
19         }
20         else{
21             ans[++cnt]+=x%10;
22             if(x>9)
23                 ++ans[cnt+1];
24         }
25     }
26     for(int j=50;j;--j)
27         if(ans[j]){
28             cnt=j;
29             break;
30         }
31     for(int i=1;i<=cnt;++i)
32         --vis[ans[i]];
33     int flag=0;
34     for(int i=0;i<10;++i)
35         if(vis[i])
36             flag=1;
37     if(flag)
38         cout<<"No\n";
39     else
40         cout<<"Yes\n";
41     for(int i=cnt;i;--i)
42         cout<<ans[i];
43     return 0;
44 }

 

 

 

posted @ 2019-08-31 16:45  sewage  阅读(185)  评论(0编辑  收藏  举报