首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美丽数字

美丽数字
EN

Stack Overflow用户
提问于 2021-11-16 12:07:40
回答 2查看 1.9K关注 0票数 0

如果序列中的所有数字都是由两位数( 8和9 )构成的,则称为可爱序列。。诸若此类。一个数字被称为美丽,如果它是可以被任何数字整除的,这是可爱序列的一部分。例如:8(可被8整除)、9(可被9整除)、889 (可被889整除)、10668 (可被889整除)是美丽的数字。给定一个数字,n,写一个代码打印“漂亮”(没有引号),如果它是可除以任何数字只包含8或9或两者,并打印-1否则。

这是我尝试过的python代码:

我使用了一个从8到n/2的for循环,我用regex来检查这个数字是否只包含8和9。这个代码对于较小的数字很好,对于更大的数字它给出的时间限制超过了!这个问题有什么有效的解决办法吗?

代码语言:javascript
复制
import re
n=int(input())
l="^[8-9]+$"
x=0
if re.match(l,str(n)):
    print("beautiful")
else:
    for i in range(8,int(n/2+1),1):
        if re.match(l,str(i)) and n%i==0:
            print("beautiful")
            x=1
            break
    if x==0:
        print(-1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-16 12:28:13

有一个函数可以生成具有指定最大长度的所有可爱数字:

代码语言:javascript
复制
from collections import deque


elements = ["8", "9"]


def all_cute_numbers(max_len):
    prefixes = deque(elements)
    while prefixes:
        p = prefixes.popleft()
        yield p
        if len(p) < max_len:
            for el in elements:
                prefixes.append(p + el)


numbers = all_cute_numbers(3)
print(list(numbers))

您可以循环它,并检查一些数字除以您的输入n

票数 2
EN

Stack Overflow用户

发布于 2021-11-17 12:33:50

n=int(输入(“输入数字"))

代码语言:javascript
复制
s = str(n)
print(len(s)) 
k = [] a = [8,9] 
flag = 0 

#通过在已经生成的数字中添加8和9来生成可爱的序列号

代码语言:javascript
复制
while True:

x= (a*10) +8 a.append(x) y= (a*10) +9 a.append(y)

#检查生成的数字是否除以给定的数字

if (n%x==0)或(n%y==0)):n%y==0=1 print(“祝福”)中断if (len(str(y))>len(s)):k.append(a) a.pop(0)

打印(K)

if (flag==0):

代码语言:javascript
复制
  print("-1") 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69988907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档