春招第二题
vivo2020春招第二题,不是很难的题目,笔试时有些细节没处理好,白白浪费时间,说到底还是自己太菜,还是总结整理下吧
题目:正整数n,m(m>9), 找到最小正整数m使得m的各位(个十百千...)相乘等于n。比如n=36,m=49
我的想法:现将整数n拆分,36=2*2*3*3,
将拆分后的最小质数因子合并以减小位数,2*2=4,3*3=9
最后合并49
由于当时没有得到系统的测试,也不知道如下代码是否100%正确,望大佬指正。
def solution(n): # 将整数n拆分成2~9内的最小质数因子,如36=2*2*3*3 divide=[] while n >= 2: num=n # 用作参考 for i in range(2, 10): if n % i == 0: # 10以内的最小质数因子相乘合并(为了减少位数) if len(divide) and i*divide[-1]<10: divide.append(divide.pop(-1)*i) else: divide.append(i) n=n / i break if n == num and n>=10: # 如果存在大于10的质数因子,那么就不符合 return -1 # 将各因子形成一个整数 ans=0 divide.sort() for i in divide: ans=(ans+i)*10 return int(ans / 10)