春招第二题

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)


#vivo2020春招##vivo##笔试题目#
全部评论
你想得太复杂了…… 直接从9开始往下除就行……两行半就够。
点赞 回复
分享
发布于 2020-03-09 13:48

相关推荐

点赞 3 评论
分享
牛客网
牛客企业服务