主题:Fibonacci数
bigchen
[专家分:1940] 发布于 2007-04-21 20:36:00
var
a:array[1..2000] of longint;
b:array[1..2000] of longint;
c:array[1..2000] of longint;
n,m,i,j,k,l,t:longint;
begin
readln(m,n);t:=n-m;
if ((t=1) or (t=2)) then
writeln(t)
else
begin
a[1]:=1;b[1]:=1;l:=1;
for i:=2 to t do
begin
for j:=1 to l do c[j]:=a[j];
for j:=1 to l do
begin
a[j]:=a[j]+b[j];
if a[j]>=100000000 then
begin
a[j+1]:=a[j+1]+a[j] div 100000000;
a[j]:=a[j] mod 100000000;
end;
end;
for j:=1 to l do b[j]:=c[j];
if a[l+1]>0 then l:=l+1;
end;
for i:=l downto 1 do write(a[i]);
end;
end.
我这个程序哪里错了???
回复列表 (共10个回复)
沙发
bigchen [专家分:1940] 发布于 2007-04-21 20:43:00
我用的压位高精度计算
满100000000进1
但诡异的是
一旦我的程序改成满10进1就正确了
不知道哪位高人能给个解释?
板凳
bigchen [专家分:1940] 发布于 2007-04-21 20:44:00
我的结果:
336447648764317832666216125107543310302148460680639065647699746800814421666623681555955136337342558206533268083615937373479048386526826304089246305643188735454436955982749160660209988418393386465273130008883026923567361313511757929743785441375213520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128239252853934346290424524892940390170623388899108584106518317336437470737908552631764325733993712871937587746897479926358370657428301616374089691784263786242128352581128205163702980893320999570792064367426202389783111470540749984592503606335609338838319233867830561364353518921332797329081337326426526339897639227234078829281779535805709936910491754708089318410561463223382174656373212482263830921032977164805472624384237486241145309381220656491403275108664339451751216152654536133311131404243685485106765843493523836959653428071768775328348234345557366719731392746273629108210679280784718035329131176778924659089938635459327894523777674406192240337638674004021330343297496902028328145933418826817683893072003634795623117103101291953169794607632737589253530772552375943788434504067715555779056450443016640119462580972216729758615026968443146952034614932291159706762432685159928347989128470674086200858713501626031207190317208609408129832158107728207635318662461127824553720853236530577595643725177443150515396009051686032203491632226408852488524331580515348496224348482993809057048348244932745373262456775587908918719080366258009594743150052402532709746995318770724376825907419939632265984147498193609285223945039707165443156421328157688908058783183404917434556270520223564846495196112460268313970975069382648706613264507665074611512677522748621598642530711298441182622661057163515069260298617049454250474913781151541399415506712562711971332527636319396069028956502882686083622410825056243701794976171121233066073310059947366875
3 楼
bigchen [专家分:1940] 发布于 2007-04-21 20:45:00
标准结果:
33644764876431783266621612005107543310302148460680063906564769974680081442166662368155595513633734025582065332680836159373734790483865268263040892463056431887354544369559827491606602099884183933864652731300088830269235673613135117579297437854413752130520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128203925285393434620904245248929403901706233888991085841065183173360437470737908552631764325733993712871937587746897479926305837065742830161637408969178426378624212835258112820516370298089332099905707920064367426202389783111470054074998459250360633560933883831923386783056136435351892133279732908133732642652633989763922723407882928177953580570993691049175470808931841056146322338217465637321248226383092103297701648054726243842374862411453093812206564914032751086643394517512161526545361333111314042436854805106765843493523836959653428071768775328348234345557366719731392746273629108210679280784718035329131176778924659089938635459327894523777674406192240337638674004021330343297496902028328145933418826817683893072003634795623117103101291953169794607632737589253530772552375943788434504067715555779056450443016640119462580972216729758615026968443146952034614932291105970676243268515992834709891284706740862008587135016260312071903172086094081298321581077282076353186624611278245537208532365305775956430072517744315051539600905168603220349163222640885248852433158051534849622434848299380905070483482449327453732624567755879089187190803662058009594743150052402532709746995318770724376825907419939632265984147498193609285223945039707165443156421328157688908058783183404917434556270520223564846495196112460268313970975069382648706613264507665074611512677522748621598642530711298441182622661057163515069260029861704945425047491378115154139941550671256271197133252763631939606902895650288268608362241082050562430701794976171121233066073310059947366875
4 楼
bigchen [专家分:1940] 发布于 2007-04-21 20:46:00
以上结果是算第10000项的时候
5 楼
游侠UFO [专家分:1200] 发布于 2007-04-21 22:32:00
会不会越界了??我原来也遇到过类似情况,数字改小就没事,一大就莫名其妙的出问题.可能需要改进一下算法才行
6 楼
bigchen [专家分:1940] 发布于 2007-04-22 08:39:00
越界??
数组开得肯定够了
因为算到极限数据30000才6270位
数组方面是没有问题的!
不过还是谢谢
7 楼
游侠UFO [专家分:1200] 发布于 2007-04-22 10:42:00
有是数组开大了,或者说运算过程中出现了过大的数都会莫名其妙的出些问题...这是我的一点经验.遇到这种情况就不能用常规方法来整了
8 楼
bigchen [专家分:1940] 发布于 2007-04-22 13:05:00
那么谁可以指教一下压位高精度计算的程序实现
(PS:压位高精度计算就是每个数组单元存储多位数字,改变数组单元之间逢10进1,而变成逢100、1000……进1。我的程序是逢100000000进1)
9 楼
angwuy [专家分:2280] 发布于 2007-04-22 19:14:00
改成逢10000进一保险一点
10 楼
bigchen [专家分:1940] 发布于 2007-05-02 19:10:00
谢谢各位
问题已解决
我来回复