今天的第一道編程題目比較簡(jiǎn)單,是將16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制的
import sys
for i in sys.stdin:
print str(int(i, 16))
有人是這么寫(xiě)的
while True:
try:
x = raw_input()
print int(x, 16)
except:
break
今天的第二道題目:質(zhì)數(shù)因子
輸入一個(gè)正整數(shù)误债,按照從小到大的順序輸出它的所有質(zhì)數(shù)的因子(如180的質(zhì)數(shù)因子為2 2 3 3 5 )
最后一個(gè)數(shù)后面也要有空格
自己先嘗試寫(xiě)了一下,但是沒(méi)有成功宴偿,主要是在尋找因子的循環(huán)出了問(wèn)題含长。
#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就是其中一個(gè)因子畔规,然后x整除i之后的商賦給x局扶,x繼續(xù)判斷是否整除i,如果可以整除,如此循環(huán)三妈,不可以整除畜埋,那么i+1,再進(jìn)行上面的循環(huán)判斷畴蒲。其實(shí)是需要兩個(gè)循環(huán)的悠鞍,第一個(gè)循環(huán)是控制因子的,實(shí)現(xiàn)因子的遞增模燥,內(nèi)部的循環(huán)是判斷是否可以整除咖祭,一直到不可以整除才推出內(nèi)部循環(huán)。
下面是一個(gè)通過(guò)的例子涧窒,就是通過(guò)兩個(gè)循環(huán)實(shí)現(xiàn)的:
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 ''
雖然可以通過(guò)測(cè)試心肪,但是感覺(jué)這個(gè)代碼還不是很嚴(yán)謹(jǐn)锭亏。
下面是另外一個(gè)例子纠吴,先寫(xiě)了一個(gè)判斷質(zhì)數(shù)的函數(shù),第二個(gè)函數(shù)中慧瘤,先把質(zhì)數(shù)因子找出來(lái)戴已,然后在else語(yǔ)句中將整數(shù)分解開(kāi)來(lái),當(dāng)然也需要兩層循環(huán)來(lái)實(shí)現(xiàn)锅减。
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