【发布时间】:2017-05-25 11:10:45
【问题描述】:
Drazil 正在和 Varda 玩数学游戏。
让我们将正整数 x 定义为其阶乘的乘积 位数。例如,f(135) = 1! * 3! * 5! = 720。
首先,他们选择一个由 n 位组成的十进制数 a 包含至少一位大于 1 的数字。该数字可能 从前导零开始。然后他们应该找到最大的积极 数 x 满足以下两个条件:
x 既不包含数字 0 也不包含数字 1。
= f(x) = f(a)
帮助朋友找到这样的号码。
Input 第一行包含一个整数 n (1 ≤ n ≤ 15)——数字 a中的位数。
第二行包含 a 的 n 位数字。至少有一位数字 a 大于 1。数字 a 可能包含前导零。
输出 输出满足条件的最大可能整数 多于。此数字十进制中不应有零和一 表示。
示例
输入
4
1234
输出
33222输入
3
555
输出
555
这是解决方案,
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int main()
{
map<char, string> mp;
mp['0'] = mp['1'] = "";
mp['2'] = "2";
mp['3'] = "3";
mp['4'] = "223";
mp['5'] = "5";
mp['6'] = "35";
mp['7'] = "7";
mp['8'] = "2227";
mp['9'] = "2337";
int n;
string str;
cin>>n>>str;
string res;
for(int i = 0; i < str.size(); ++i)
res += mp[str[i]];
sort(res.rbegin(), res.rend());
cout<<res;
return 0;
}
如果有人解释为什么将数字转换为其他形式的数字而不是仅仅通过某种方式来计算数字的原因,我想知道......可悲的是,蛮力会在这个问题中给出 TLE(超出时间限制) 15位数字的原因,所以这是一个很大的数字,所以我希望有人可以解释下面的“证明”,因为我知道什么理论说这些数字可以转换为这些数字,例如4到223和东西。 提前致谢。
【问题讨论】:
-
我认为解释中缺少一些内容。 “让我们将正整数 x 定义为其数字的阶乘的乘积。例如,。”,无法真正理解这句话,好像示例丢失了。后来,"2.=f(x)=f(a)",f是什么?在第一个等号之前似乎还缺少一些东西。
-
抱歉我编辑了它@jdehesa 似乎引用消除了这部分文本
标签: c++