思想:初中知识:一个数每一位之和是3的倍数,那这个数就是3的倍数。先把n转成字符串,判断每一位之和是不是3的倍数。如果不是3的倍数那肯定也不是30的倍数,直接输出-1并结束函数。如果是3的倍数那就继续判断。接下来把字符串从大到小排序,然后再转为整数。接下来只需要判断这个数是不是10的倍数,如果是那么它就是我们希望得到的30倍数的最大值。如果不是,说明之前的字符串不包含0,自然组成不了30的倍数,输出-1。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
string s=to_string(n);
int sum=0;
for(int i=0;i<s.size();i++) sum+=s[i]-'0';
if(sum%3!=0){
cout << -1 << endl;
return 0;
}
sort(s.rbegin(),s.rend());
int ans=stoi(s);
if(ans%10!=0) cout << -1 << endl;
else cout << ans << endl;
}