思路:
暴力查出符合条件的所有数字,注意无需考虑字符位置,可以通过递增创建字符的方式优化。
然后!不开long long 见祖宗!
我被卡了快有1小时!重构了三回代码!最后发现最初的代码改个long long就能过!我$%^&*&^**^&&^
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
map<string,int> q;
int maxd=0;
void get_max(string s,int ans,string flag) {
if(s.size()==1) {
q[flag]=ans;
maxd=max(maxd,ans);
// cout<<ans<<"AAAAAAAAA"<<endl;
return ;
}
int cnt=1;
for(int i=0;i<s.size();i++) {
cnt=cnt*(s[i]-'0');
}
string c=to_string(cnt);
get_max(c,ans+1,flag);
}
void get_string(string s,int now,int len,int start) {
if(start>=9) start=9;
if(now==len) {
// cout<<s<<"AAAAA"<<endl;
get_max(s,0,s);
return ;
}
for(int i=start;i<=9;i++) {
char c=i+'0';
s+=c;
get_string(s,now+1,len,i);
s.erase(s.size()-1,1);
}
}
signed main() {
string s;
for(int i=1;i<=18;i++) {
get_string(s,0,i,2);
}
for(auto i:q) if(i.second==maxd) {
cout<<i.first<<endl;
}
}

京公网安备 11010502036488号