数位操作1

数位操作1

https://ac.nowcoder.com/acm/problem/205529

题号 NC205529
名称 数位操作1
来源 第十五届中北大学算法与程序设计竞赛(公开赛)

解题思路

n 分解因数,且每个因数都必须是个位数。
如果 n > 9,使用循环 for i=9 downto 2 作为因数,这样能使分解得到的因数最少;
n 可以整除,记录下 i 因数,n = n / i
一直进行上述步骤,直到 n 是个位数时结束。
将记录下的因数从小到大排序,较小的数为高位,这样最后得到的 ans 是最小的。

还要注意 ans > 9,当 n < 10 时,分解因数 n = n * 1

C++代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

long long func(long long n){
    if(n < 9){
        return (10 + n);
    }
    vector<int> nums;
    while(n > 9){
        bool flag = false;
        for(int i=9; i>=2; --i){
            if(n % i == 0){
                flag = true;
                nums.push_back(i);
                n /= i;
                break;
            }
        }
        if(!flag){
            return -1;
        }
    }
    nums.push_back(n);
    sort(nums.begin(), nums.end());
    long long ans = 0;
    for(int i=0; i<nums.size(); ++i){
        ans *= 10;
        ans += nums[i];
    }
    return ans;
}

int main(){
    long long n;
    while(cin >> n){
        cout << func(n) << endl;
    }
    return 0;
}
全部评论

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务