1. 程式人生 > >基本演算法-計算器的新功能

基本演算法-計算器的新功能

題目描述
當你學一些視覺化程式設計語言時,老師經常會讓你設計並且程式設計做出一個計算器,這時也許你會仿照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)