NC205529. 数位操作1
描述
输入描述
输入一个小于等于的数正整数n
输出描述
如果可以找到 某个数据 ans 数位乘积与 n 相等 那么便输出 ans否则输出 -1
示例1
输入:
100 12
输出:
455 26
说明:
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; }