标签:python 尾数前移
程序地址:http://www.cheemoedu.com/exercise/82
问题描述:
求一个自然数N,个位数是6,将6提到最前面所得数是N的4倍。
我的代码:
import datetime starttime = datetime.datetime.now() a=b=c=0 for i in xrange(10,1000000): a=int(str(i)[-1::]) if a!=6: continue b=(i-6)/10 c=int(str(a)+str(b)) if c==i*4: print i endtime = datetime.datetime.now() print (endtime - starttime).seconds
我的思路:
前两行和后两行是用来计算该程序运行时间的。
int(str(i)[-1::])的作用是取得数的最后一位,然后判断该数是不是等于6,然后(数-6)/10得到除了个位数之外的数,int(str(a)+str(b))是用来得到一个以6开头的新数,最后在判断这个新数是否为原数的4倍;
结果:
E:\python\python.exe D:/pycharm/python/奇猫百题/尾数前移.py
153846
6
示例代码:
def fun(n): nn = n t = 6 while nn > 0: t *= 10 nn /= 10 m = 10 * n + 6 if t + n == m * 4: print m for x in range(1, 100000): fun(x)
代码分析:
示例代码的for循环直接是6以前的数nn,然后通过while循环(6不断乘以10,nn不断除以10)得到以6开头后面全为0的数t,而原数就是10*n+6,新数就是t+n,这样就得到了两个数,最后在判断即可;
总结:
我的代码因为取值范围是1000000比较慢,而示例代码循环的是100000,所以很快,事实证明我的用了6秒,它用了不到1秒;
标签:python 尾数前移
原文地址:http://jmbzs.blog.51cto.com/9449309/1787619