http://acm.hdu.edu.cn/showproblem.php?pid=5718
将一串没有前导0的数重组成2个不带前导0的数,使其相加最大。
很简单的贪心,要想最大一定是个多位数与一个1位数相加,只要将数串正序排个序,即可。
注意 如果数串里的非0数只有1个,那就无法分成2个无前导0的数了。
#include<bits/stdc++.h>
using namespace std;
char a[11111111];
void co(int wz)
{
int jw=a[wz]-'0';
//cout<<wz<<endl;
int i;
for(i=0;i<=strlen(a)-1;i++)
{
if(i==wz)continue;
if(a[i]-'0'+jw>=10)
{
a[i]=a[i]+jw-10;
jw=1;
}
else {
char b=a[i]+jw;
a[i]=b;
jw=0;
break;
}
}
if(jw!=0)cout<<jw;
for(i=strlen(a)-1;i>=0;i--)
{
if(i==wz)continue;
cout<<a[i];
}
cout<<endl;
}
int main(){
int t;
cin>>t;
while(t--)
{
cin>>a;
if(strlen(a)<=1)
{
cout<<"Uncertain"<<endl;
}
else {
int i;
sort(a,a+strlen(a));
int wz=0;
for(i=strlen(a)-1;i>=1;i--)
{
if(a[i-1]=='0')
{
wz=i;
break;
}
}
if(wz==strlen(a)-1)
cout<<"Uncertain"<<endl;
else
co(wz);
}
}
return 0;
}