1308 乘积最大 2
/* 数字可以重复 显然想要最优的话是没有1的 我们列举几个看看规律 5-> 2*3 6-> 3*3 7-> 2*2*3 8-> 2*3*3 9-> 3*3*3 10的话我们分解成2个5 也就是2*2*3*3 也就是说若ai>=5我们就分成x*2+y*3 若ai==4我们就分成2*2 剩下的就不用分了 这样的话我们就把n分成了 x*2+y*3 且3越多越大 */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,ans[100001],l; void Che(int x) { for(int i=1;i<=l;i++) ans[i]=ans[i]*x; for(int i=1;i<=l;i++) if(ans[i]>9) { ans[i+1]=ans[i+1]+ans[i]/10; ans[i]=ans[i]%10; } if(ans[l+1]>0)l++; } int main() { cin>>n; ans[1]=1; l=1; while(n>=5) { n=n-3; Che(3); } Che(n); cout<<l<<endl; if(l>100) for(int i=l;i>l-100;i--)cout<<ans[i]; else for(int i=l;i>=1;i--) cout<<ans[i]; }