#include <iostream> using namespace std; string b[8]={"500","000","750","250","125","375","625","875"};//125的倍数 int cishu[10];//统计数里面0~9出现的次数 int main() { string s;//用字符串是因为给的数只能通过字符串存 cin>>s; int sum=0;//sum用来统计每一位数的和,根据375=3*125,所以sum要是3的倍数 for(int i=0;i<=s.size()-1;i++){ sum+=s[i]-'0';//-'0'是ASCII值来进行减的,例:'1'-'0'=1 cishu[s[i]-'0']++;//统计数里面0~9出现的次数 } if(sum%3!=0){//判断是不是3的倍数 cout<<"-1"<<endl;//不是3的倍数返回-1 return 0; } for(int i=0;i<8;i++){ for(int j=0;j<3;j++){ cishu[b[i][j]-'0']--;//这一步是为了去掉s中出现的'000'/'750'... } bool flag=true;//为后面s中是否有足够的0/7...个数判断 for(int k=0;k<=9;k++){ if(cishu[k]<0){//个数不够 flag=false; break; } } if(flag){ for(int j=9;j>=0;j--){//从9开始是为了防止出现前置0 while(cishu[j]>0){ cout<<j; cishu[j]--; } } cout<<b[i];//把减去的'000','125'...输出 return 0; } for(int j=0;j<3;j++){ cishu[b[i][j]-'0']++;//把减去的0/7...个数加回来 } } cout<<"-1"<<endl; return 0; } // 64 位输出请用 printf("%lld")