题意:
输入一个不超过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 "; 39 else 40 cout<<"Yes "; 41 for(int i=cnt;i;--i) 42 cout<<ans[i]; 43 return 0; 44 }