第十五屆中北大學算法與程序設計競賽(公開賽)G.數位操作1

第十五屆中北大學算法與程序設計競賽(公開賽)G.數位操作1

題目鏈接

題目描述

給你一個正整數 nn<=1010n (n<=10^{10} )找到最小的某個數據 ans (ans >9)
要求 ans 的每一數位(個位 十位 百位 千位…) 乘積與 n 相等, 不存在輸出-1
PS:多組輸入,輸入直到文件結束

輸入描述:

輸入一個小於等於 101010^{10} 的數正整數n

輸出描述:

如果可以找到 某個數據 ans 數位乘積與 n 相等 那麼便輸出 ans
否則輸出 -1

示例1

輸入

100
12

輸出

455
26

直接模擬,每一次從 292-9 裏面挑一個取餘爲 0 的數存下來,如果不存在則輸出 -1,最後排序輸出即可~
有一個坑點是小於等於9的數 xx 就輸出 10+x10+x,AC代碼如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

main(){
    ll n;
    while(cin>>n){
        ll m=n;
        vector<int>s;
        int flag;
        while(n!=1){
            flag=0;
            for(ll i=9;i>1;i--){
                if(n%i==0){
                    flag=1;
                    s.push_back(i);
                    n/=i;
                    break;
                }
            }
            if(flag==0) break;
        }
        if(!flag){puts("-1");continue;}
        if(m<=9) {putchar('1');cout<<m<<endl;continue;}
        sort(s.begin(),s.end());
        for(auto i:s) cout<<i;
        puts("");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章