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

题意:

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

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int vis[17];
string s;
int ans[57];
int main(){
cin>>s;
int len=s.size();
for(int i=len-1;i>=0;--i)
vis[s[i]-'0']++;
int cnt=0;
int x=0;
for(int i=len-1;i>=0;--i){
x=(s[i]-'0')*2;
if(ans[cnt+1]+x%10>9){
ans[++cnt]+=x%10-10;
ans[cnt+1]++;
}
else{
ans[++cnt]+=x%10;
if(x>9)
ans[cnt+1]++;
}
}
for(int j=50;j;--j){
if(ans[j]){
cnt=j;
break;
}
}
for(int i=1;i<=cnt;++i)
vis[ans[i]]--;
int flag=0;
for(int i=0;i<10;++i)
if(vis[i])
flag=1;
if(flag)
cout<<"No\n";
else
cout<<"Yes\n";
for(int i=cnt;i;--i)
cout<<ans[i];
return 0;
}

上一篇:LeetCode 1023. Camelcase Matching


下一篇:Test 1023 T1&T2