奇妙数字(数论)题解

导读:本篇文章讲解 奇妙数字(数论)题解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

题目描述

让将F(x)定义为其数字的阶乘积。例如,F(124)=1!*2!*4!=48

首先,选择一个由n位数字组成的十进制数字a,该数字至少包含一个大于1的数字。该数字可能以前导零开头。然后,他们应该找到满足以下两个条件的最大正数x:

1. x既不包含数字0也不包含数字1

2. F(x)=F(a)

输入

第一行包含一个整数 n(1≤ n ≤15)

第二行包含一个数字a,其中至少有一个大于1的数字,数字a可能包含前导零。

输出

输出一个整数,此数字不能包含0和1

样例输入

4
1324

样例输出

33222

提示

F(1324)=1!*3!*2!*4!=F(33222)

AC代码

#include<algorithm>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
int main()
{   
    int n;
    cin>>n;
    string a;
    cin>>a;
    //可删可不删
    // for(int i=0;i<n;i++)
    // {
    //     if(a[i]=='1'||a[i]=='0')
    //     a.erase(i,1);//从字符串第i个位置中删除1个字符
    // }
    vector<int> ans;
    for(int i=0;i<a.length();i++)
    {
        if(a[i]=='2') ans.push_back(2);
        if(a[i]=='3') ans.push_back(3);
        if(a[i]=='4') ans.push_back(2),ans.push_back(2),ans.push_back(3);
        if(a[i]=='5') ans.push_back(5);
        if(a[i]=='6') ans.push_back(5),ans.push_back(3);
        if(a[i]=='7') ans.push_back(7);
        if(a[i]=='8') ans.push_back(2),ans.push_back(2),ans.push_back(2),ans.push_back(7);
        if(a[i]=='9') ans.push_back(2),ans.push_back(3),ans.push_back(3),ans.push_back(7);
    }
    sort(ans.begin(),ans.end());
    for(int i=ans.back();!ans.empty();i=ans.back())
    {
        ans.pop_back();
        cout<<i;
    }
    return 0;
}

注意

这题是有规律的。

当某一位是4时,则对应的换成2,2,3就行。因为4! = 2!+ 2!+ 3!。

同理:

是6时,换成3,5;

是8时,换成2,2,2,7;

是9时,换成2,3,3,7;

以上四种替换都是唯一对应的,所以不存在其他替换可能。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/103327.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!