请注意,数字 123456789是一个 9位数字,完全由 1 到 9 组成,没有重复。
将其加倍,我们将获得 246913578,它恰好是另一个 9 位数字,恰好由 1 到 9 组成,只是排列不同。
现在,给定你一个 k 位的数字,请你判断将其加倍以后得到的数字是否可以由原数字的各数位重新排列得到。
思路:本题可以直接用int处理,个人习惯用字符串String .
首先将数字扔到一个vector容器1中,
处理出加倍后的字符串
扔到vector容器2中
两个容器都排下序,再比对一下
最后要输出一下处理后的串
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
string gao(string s){
string ans=s;
int last=0;
for(int i=s.length()-1;i>=0;i--){
int sum=s[i]-'0'+ s[i]-'0'+last;
ans[i]=(sum%10)+'0';
last=sum/10;
}
if(last) ans="1"+ans;
return ans;
}
string s;
int main(){
cin>>s;
vector<char>s1,s2;
rep(i,0,s.length()) s1.push_back(s[i]);
s=gao(s);
rep(i,0,s.length()) s2.push_back(s[i]);
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
if(s1==s2) cout<<"Yes"<<endl;
else cout<<"No" <<endl;
cout<<s<<endl;
}