题目描述如下:
题目大致意思:
就是给出一个长度不超过20位的整数(因为long long 型整数最多可以表示19位的整数,很显然在这道题中用long long会有溢出的风险),将该整数加倍后,判断是否是原来整数的一个排列,如果是,则输出Yes,如果不是,则输出No,并且在下一行中输出加倍后的整数。
大致思路:
用一个字符串来倒序接收输入数字,让后对两个相同的字符出串的对应位进行加法处理,注意进位,完成后会得到一个新的字符串。判断新字符串是否是原字符串的一个排列,有一个很简单的方法,可以分别对两个字符串从小到大进行排序,如果排序后的两个字符串相等,则新生成的字符串是原字符串的一个排列。
提交结果如下:
提交代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str;
cin>>str;
string ans;
int jinwei=0;
for(int i=str.size()-1;i>=0;i--)
{
int temp=(str[i]-'0')*2+jinwei;
if(temp>=10)
{
jinwei=temp/10;
temp=temp%10;
}
else
{
jinwei=0;
}
ans=ans+to_string(temp);
}
if(jinwei!=0)
ans=ans+to_string(jinwei);
string temp=ans;
sort(temp.begin(),temp.end());
sort(str.begin(),str.end());
if(str==temp)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
}
本次提交后累计得分915。