栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

一次生成一个数字的代码

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一次生成一个数字的代码

是! 我做到了继续分数!

我从生成2的平方根的数字中找到了这些代码

def z(contfrac, a=1, b=0, c=0, d=1):    for x in contfrac:        while a > 0 and b > 0 and c > 0 and d > 0: t = a // c t2 = b // d if not t == t2:     break yield t a = (10 * (a - c*t)) b = (10 * (b - d*t)) # continue with same fraction, don't pull new x        a, b = x*a+b, a        c, d = x*c+d, c    for digit in rdigits(a, c):        yield digitdef rdigits(p, q):    while p > 0:        if p > q:d = p // qp = p - q * d        else:d = (10 * p) // qp = 10 * p - q * d        yield d

我制作了连续分数生成器:

def e_cf_expansion():    yield 1    k = 0    while True:        yield k        k += 2        yield 1        yield 1

并将它们放在一起:

def e_dec():    return z(e_cf_expansion())

然后:

>>> gen = e_dec()>>> e = [str(gen.next()) for i in xrange(1000)]>>> e.insert(1, '.')>>> print ''.join(e)2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

奖励:生成sqrt(n)的连续分数的代码,其中n是一个正整数,而sqrt(n)是不合理的:

def sqrt_cf_expansion(S):    """Generalized generator to compute continued       fraction representation of sqrt(S)"""    m = 0    d = 1    a = int(math.sqrt(S))    a0 = a    while True:        yield a        m = d*a-m        d = (S-m**2)//d        a = (a0+m)//d


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号