我想将一个带有5000位数的十进制数与一个5000位或更少的整数相乘。我已经尝试过十进制模块,但它似乎不起作用。另外我如何打印一个大数字的所有数字因为我的号码可能有10000位数?
我也试过这个(How to print all digits of a large number in python?),但它没有帮助。from decimal import *
n=int(raw_input())
e=Decimal('2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128439612946035291332594279490433729908573158029095863138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376917041977780085362730941710163434907696423722294352366125572508814779223151974778060569672538017180776360346245927877846585065605078084421152969752189087401966090665180351650179250461950136658543663271254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870937650226014929101151717763594460202324930028040186772391028809786660565118326004368850881715723866984224220102495055188169480322100251542649463981287367765892768816359831247788652014117411091360116499507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590379804583818232336861201624373656984670378585330527583333793990752166069238053369887956513728559388349989470741618155012539706464817194670834819721448889879067650379590366967249499254527903372963616265897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618738578364475844842355558105002561149239151889309946342841393608038309166281881150371528496705974162562823609216807515017772538740256425347087908913729172282861151591568372524163077225440633787593105982676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681546444005331608778314317444081194942297559931401188868331483280270655383300469329011574414756313999722')
x = Decimal(n*e)
getcontext().prec=4100
print x
对于n = 1,它给出2.718281828459045235360287471
我希望这个答案是e。
答案 0 :(得分:1)
您需要在执行乘法之前更改当前上下文中的精度,例如
getcontext().prec = 4100
print n * e
答案 1 :(得分:0)
我建议先计算小数点后面有多少个数字。然后乘以整数。例如,你有
>>>a = 1111111111.2222222222
>>>b = 2222222222.333333333
然后在a的小数点后面有10个数字,在b的小数点后面有9个数字,总共19个。 然后使用
>>>c = 11111111112222222222*2222222222333333333
然后c将是24691358028395061724320987653925925926,19位小数点后面的数字,所以你回答a * b将是2469135802839506172.4320987653925925926 c中的小数点位置可以通过将c转换为str来找到。
我总结了以下功能:
def multi(a, b):
"""
"""
a = str(a)
b = str(b)
num = 0
tmp = a.find('.')
if tmp != -1:
num = num + len(a) - tmp - 1
tmp = b.find('.')
if tmp != -1:
num = num + len(b) - tmp -1
a1 = a.replace(".", "")
b1 = b.replace(".", "")
a1 = int(a1)
b1 = int(b1)
c = a1 * b1
ans = [c, num]
c = str(c)
res = c[:len(c)-num]
tmp = c[len(c)-num:]
res = res + '.' + tmp
return res, ans
两个返回,第一个是float的str格式,第二个是由两个数字组成的列表,第一个是整数,第二个是小数点后面的数字。
希望这能帮到你!