注意:我用的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
新闻热点
疑难解答