列表

详情


NC205529. 数位操作1

描述

给你一个正整数 n ()找到最小的某个数据 ans (ans >9)
要求 ans 的每一数位(个位 十位 百位 千位......) 乘积与n相等, 不存在输出-1
PS:多组输入,输入直到文件结束

输入描述

输入一个小于等于的数正整数n

输出描述

如果可以找到 某个数据 ans 数位乘积与 n 相等 那么便输出 ans
否则输出 -1

示例1

输入:

100
12

输出:

455
26

说明:

4*5*5 = 100
2*6 = 12

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 156ms, 内存消耗: 3568K, 提交时间: 2020-05-24 15:43:37

while True:
    try:
        s=int(input());a=0;b="";tmp=s
        for i in range(9,1,-1):
            while s%i==0:
                b+=str(i)
                s=s//i
                a=1
        if tmp<=9:
            print("1"+str(tmp))
        elif a==1 and int(s)==1:
            print(b[::-1])
        else:
            print("-1")
    except:
        break

C++14(g++5.4) 解法, 执行用时: 33ms, 内存消耗: 376K, 提交时间: 2020-05-26 22:11:38

#include<bits/stdc++.h>
using namespace std;
int n,k,i,a[100005];
int main(){
	while(cin>>n){
		if(n<10){
			cout<<"1"<<n<<endl;
			continue;
		}
		k=0;
		for(i=9;i>=2;i--){
			while(n%i==0){
				a[k++]=i;
				n=n/i;
			}
		}
		if(n!=1){
			cout<<"-1"<<endl; 
			continue;
		} 
		sort(a,a+k);
		for(i=0;i<k;i++){
			cout<<a[i];
		}
		cout<<endl;
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 9ms, 内存消耗: 484K, 提交时间: 2020-05-30 15:52:59

#include<stdio.h>
int main() {
	int n;
	while(scanf("%d",&n)!=EOF) {
		if(n<10 ) {
			printf("%d\n",10+n);
			continue;
		}
		int ans=0,cnt=1;
		for(int i=9; i>1; i--) {
	while(n%i==0) {
				ans=ans+cnt*i;
				cnt*=10;
				n=n/i;
			}

		}
		if(n>1)
			printf("-1\n");
		else
			printf("%d\n",ans);

	}


	return 0;
}

上一题