第一次在这个社区发帖。我最近开始学习Python(2周),一位同学给了我一个任务:“编写一个程序来检查整数是否是吸血鬼数字。 要使整数成为吸血鬼数(v),它需要满足以下4个条件:
1)有一对数字。我们打电话给数字:n在
2)你可以用两个整数x和y相乘得到v,每个整数都有n/2位数。x和y是尖牙。在
3)两个尖牙不能同时以0结尾。在
4)v可以用x和y的所有数字组成,任何顺序,每个数字只使用一次。在
示例:
21*60=1260<;--吸血鬼编号
210*600=126000<;--不是吸血鬼数字
第一个吸血鬼编号如下:1260、1395、1435、1530、1827、2187、6880、102510、104260、105210、105264、105750、108135、110758、115672、116725、117067、118440、120600、123354、124483、125248、125433、125460、125500、126027、126846、129640。。。在
到目前为止,我已经做了一个程序,可以达到前3个标准(我想)。我在找最后一个的帮助。在
这就是我得到的:(抱歉用西班牙语写的东西)
v=int(input("Enter number to test for vampire:"))
#Test for pair number of digits
def nd(a):
nd = 0
while a != 0:
d = a % 10
if d != 0:
nd += 1
a = a // 10
return nd
def DigitosPar(a):
if nd(a)%2==0:
return 1
else:
return 0
#Last digit is 0
def UltimoDigCero(b):
ud = 0
ud = b % 10
if ud==0:
return 1
else:
return 0
if DigitosPar(v)==1:
x=[]
for i in range(int(10**(nd(v)/2-1)),int(10**(int(nd(v))/2))):
x.append(i)
y=x
z=0
posiblex=0
posibley=0
for ia in range(0,len(y)):
for ib in range(0,len(x)):
z=y[ia]*x[ib]
if z==v and not((UltimoDigCero(x[ib])==1 and UltimoDigCero(y[ia])==1)):
posiblex=x[ib]
posibley=y[ia]
print(v,"has as fangs",posiblex,posibley)
if posiblex==0:
print(v, "not a vampire")
else:
print(v, "not a vampire")
这里有一个快速的方法来获得6位数或更长数字的解:
下面是我在空闲状态下运行时的输出:
^{pr2}$1260是一个吸血鬼数,因为除数可以串联成1260的排列。你可以这样做
要列出第一个
n
吸血鬼数字,可以将上面的代码用作函数并增量测试整数。在相关问题 更多 >
编程相关推荐