基本演算法-計算器的新功能
阿新 • • 發佈:2018-12-31
題目描述
當你學一些視覺化程式設計語言時,老師經常會讓你設計並且程式設計做出一個計算器,這時也許你會仿照windows系統自帶的計算器外觀和功能去設計,但是現在老師要你多做出一個有新功能的計算器,實現當輸入一個數時,能夠將這個數分解成一個或多個素因子乘積的形式,並按素因子的大小排列顯示出來。大家對計算器中數的表示應該很清楚的。下面顯示出了0 — 9這十個數字的表示形式。每個數字都佔據5 * 3大小的字元區域
… | … |
---|---|
輸入 輸入有多組測試資料,每組包括一個正整數n(1 < n <= 1000000)。 |
樣例輸入 10 2 |
輸出 對於每個數,將它分解成若干個素數乘積的形式,並按從小到大的順序輸出,素因子之間用“ * ”的形式連線。 | 樣例輸出 - - | | - * - | | - - - | - | - |
時間限制 C/C++語言:1000MS 其它語言:3000MS |
記憶體限制 C/C++語言:65536KB 其它語言:589824KB |
#!/usr/bin/env python
# coding=utf-8
import sys
def pp(result):
l = {}
l[0] = {str(i):' ' if i in (1,4) else ' - ' for i in range(10)}
l[1] = {str(i):'| ' if i in (5,6) else (' |' if i in (1,2,3,7) else '| |') for i in range(10)}
l[2] = {str(i):' ' if i in (1,7,0) else ' - ' for i in range(10)}
l[3] = {str(i):'| ' if i in (2,) else (' |' if i in (1,3,4,5,7,9) else '| |') for i in range(10)}
l[4] = {str(i):' ' if i in (1,4,7) else ' - ' for i in range(10)}
for i in range(5):
for index,j in enumerate(result):
for jj in str(j):
sys.stdout.write(l[i][jj])
if index < len(result)-1:
sys.stdout.write('*' if i==2 else ' ')
sys.stdout.write('\n')
while 1:
n = int(raw_input())
a = n
s = [2]
result = []
i = 2
while i * i <= n:
i += 1
for j in s:
if i % j == 0:
break
elif j * j > i:
s.append(i)
break
if s[-1]<i:
continue
for j in s:
while 1:
if a % j == 0:
result.append(j)
a = a / j
else:
break
else:
if a>1:
s.append(a)
result.append(a)
#print result
pp(result)
別人家的答案:
優點在於他分解素因數的時候,是直接讓每個數字作被除數試一下,而我是先構造一個素數列表,再用素數列表去作被除數去試
#!/usr/bin/env python
#coding=utf-8
def factorize(n):
i = 2
flist = []
while(i*i<=n):
while(n%i==0):
flist.append(i)
n /= i
i += 1
if(n!=1):
flist.append(n)
return flist
def charlist(flist):
clist = []
for i in range(len(flist)):
for c in str(flist[i]):
clist.append(int(c))
if(i<len(flist)-1):
clist.append("*")
return clist
def printclist(clist):
row1 = [" - "," "," - "," - "," "," - "," - "," - "," - "," - "," "]
row2 = ["| |"," |"," |"," |","| |","| ","| "," |","| |","| |"," "]
row3 = [" "," "," - "," - "," - "," - "," - "," "," - "," - ","*"]
row4 = ["| |"," |","| "," |"," |"," |","| |"," |","| |"," |"," "]
row5 = [" - "," "," - "," - "," "," - "," - "," "," - "," - "," "]
chars = [row1,row2,row3,row4,row5]
for i in range(5):
out = []
for c in clist:
if(c=="*"):
out.append(chars[i][10])
else:
out.append(chars[i][c])
print "".join(out)
while True:
n = int(raw_input())
flist = factorize(n)
clist = charlist(flist)
printclist(clist)