想法:之前没注意给的数的长度,所以即使用long long int也通过不了最后的三个测试点,这一题要应用大数的加法。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[30];
cin>>s;
int x[30];
int y[30]={0};
int n=0;
int ls=strlen(s);
int ly=0;
while(s[n]!='\0'){
x[ls-1-n]=s[n]-'0';
n++;
}
for(int i=0; i<ls; i++){
if(x[i]*2>9){
y[i]=(x[i]*2)%10+y[i];
y[i+1]=1;
}else{
y[i]=x[i]*2+y[i];
}
}
int t[30];
while(y[ly]!=0||ly<ls){
ly++;
}
for(int i=0; i<ly; i++)
t[i]=y[i];
if(ly!=ls){
cout<<"No"<<endl;
for(int i=ly-1; i>-1; i--)
cout<<y[i];
return 0;
}
int flag;
for(int i=0; i<ls; i++){
flag=0;
for(int j=0; j<ls; j++){
if(x[i]==t[j]){
flag=1;
t[j]=-1;
break;
}
}
if(flag==0){
cout<<"No"<<endl;
for(int i=ly-1; i>-1; i--)
cout<<y[i];
return 0;
}
}
cout<<"Yes"<<endl;
for(int i=ly-1; i>-1; i--)
cout<<y[i];
return 0;
}