注意:我用的python2.7,大家如果用Python3.0以上的版本,請記得在print()函數哦!如果因為版本問題評論的,不做回復哦!!
21.題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n!=k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
注意:要知道 format 這個函數,其實就是格式化,與 print 差不多,具體可參考//www.jb51.net/article/63672.htm
方法一:只用循環
# -*- coding: UTF-8 -*-while True: n = input("請輸入一個數:") #這里有逗號是為了保證它輸出后不自動換行,下同 print '{} = '.format(n), #判斷你輸入的是不是正確格式 if not isinstance(n, int) or n <= 0 : print '請輸入一個正確的數字 !' #如果你是輸入的是 1,那只輸出 1 if n in [1] : print '{}'.format(n) while n >= 2: for i in range(2,n + 1): if n % i == 0: n /= i #n 等于 n/i if n == 1: print i , else : # index 一定是素數 print '{} *'.format(i), break print #換行咯方法二:定義函數
# -*- coding: UTF-8 -*-def reduceNum(n): print '{} = '.format(n), if not isinstance(n, int) or n <= 0 : print '請輸入一個正確的數字 !' exit(0) elif n in [1] : print '{}'.format(n) while n not in [1] : # 循環保證遞歸 for i in range(2, n + 1) : if n % i == 0: n /= i # n 等于 n/i if n == 1: print i else : # i 一定是素數 print '{} *'.format(i), breakreduceNum(100)reduceNum(9)輸出:
100 = 2 * 2 * 5 * 5
9 = 3 * 3
方法三:用列表 append 函數,這里只是用列表的形式輸出了所有x的因子
# -*- coding: UTF-8 -*-while True: x = input("pls input a number:") ret = [] while x > 1: for v in range(2,x + 1): if x % v == 0: ret.append(v) x /= v break print ret 輸出: pls input a number:9 [3, 3]說明:其實兩種方法大同小異,沒什么區別。
22.題目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
程序分析:關鍵是計算出每一項
# -*- coding: UTF-8 -*-Tn = 0Sn = [] #用來存儲數字個數n = int(raw_input('輸入你想要相加的數字個數 n = :')) #控制你要相加的次數a = int(raw_input('輸入數字 a = :')) #真正要加的數字for count in range(n): Tn = Tn + a a = a * 10 Sn.append(Tn)#每加一個數就放在Sn列表中 print Tn #lambda這個函數比較強大,具體用法可以看下資料Sn = reduce(lambda x,y : x + y,Sn)print Sn
新聞熱點
疑難解答