思路:

暴力查出符合条件的所有数字,注意无需考虑字符位置,可以通过递增创建字符的方式优化。

然后!不开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;
	} 
	
}