今天的第一道编程题目比较简单,是将16进制的字符串转换为10进制的
import sys
for i in sys.stdin:
print str(int(i, 16))
有人是这么写的
while True:
try:
x = raw_input()
print int(x, 16)
except:
break
今天的第二道题目:质数因子
输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格
自己先尝试写了一下,但是没有成功,主要是在寻找因子的循环出了问题。
#import math
def factor(x):
i = 1
l = []
if x.isdigit and int(x) > 0:
x = int(x)
while i < x:
if x % i == 0:
l.append(i)
x /= i
i += 1
return l
if __name__ == '__main__':
x = raw_input('Pls input the num: ')
y = factor(x)
z = set(sorted(y))
for j in list(z):
print j
如果x可以整除i,那么i就是其中一个因子,然后x整除i之后的商赋给x,x继续判断是否整除i,如果可以整除,如此循环,不可以整除,那么i+1,再进行上面的循环判断。其实是需要两个循环的,第一个循环是控制因子的,实现因子的递增,内部的循环是判断是否可以整除,一直到不可以整除才推出内部循环。
下面是一个通过的例子,就是通过两个循环实现的:
m=int(raw_input())
line=[]
i = 2
while i*i<=m:
while m%i==0:
m = m/i
line.append(i)
i = i+1
if m !=1:
line.append(m)
for j in line:
print j,
print ''
虽然可以通过测试,但是感觉这个代码还不是很严谨。
下面是另外一个例子,先写了一个判断质数的函数,第二个函数中,先把质数因子找出来,然后在else语句中将整数分解开来,当然也需要两层循环来实现。
def isPrime(n):
return not [i for i in xrange(2, int(n ** 0.5) + 1) if n % i == 0]
def primeFactors(x):
a = [i for i in xrange(2, int(x ** 0.5) + 1) if isPrime(i) and x % i == 0]
if len(a) == 0:
return str(x) + ' '
else:
factors = []
for i in a:
while x % i == 0:
factors.append(i)
x //= i
if x != 1:
factors.append(x)
return ' '.join(map(str, factors)) + ' '
print primeFactors(input())
参考资料:
https://www.nowcoder.com