回 帖 发 新 帖 刷新版面

主题:Fibonacci数

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个回复)

沙发

我用的压位高精度计算
满100000000进1
但诡异的是
一旦我的程序改成满10进1就正确了
不知道哪位高人能给个解释?

板凳

我的结果:
336447648764317832666216125107543310302148460680639065647699746800814421666623681555955136337342558206533268083615937373479048386526826304089246305643188735454436955982749160660209988418393386465273130008883026923567361313511757929743785441375213520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128239252853934346290424524892940390170623388899108584106518317336437470737908552631764325733993712871937587746897479926358370657428301616374089691784263786242128352581128205163702980893320999570792064367426202389783111470540749984592503606335609338838319233867830561364353518921332797329081337326426526339897639227234078829281779535805709936910491754708089318410561463223382174656373212482263830921032977164805472624384237486241145309381220656491403275108664339451751216152654536133311131404243685485106765843493523836959653428071768775328348234345557366719731392746273629108210679280784718035329131176778924659089938635459327894523777674406192240337638674004021330343297496902028328145933418826817683893072003634795623117103101291953169794607632737589253530772552375943788434504067715555779056450443016640119462580972216729758615026968443146952034614932291159706762432685159928347989128470674086200858713501626031207190317208609408129832158107728207635318662461127824553720853236530577595643725177443150515396009051686032203491632226408852488524331580515348496224348482993809057048348244932745373262456775587908918719080366258009594743150052402532709746995318770724376825907419939632265984147498193609285223945039707165443156421328157688908058783183404917434556270520223564846495196112460268313970975069382648706613264507665074611512677522748621598642530711298441182622661057163515069260298617049454250474913781151541399415506712562711971332527636319396069028956502882686083622410825056243701794976171121233066073310059947366875

3 楼

标准结果:
33644764876431783266621612005107543310302148460680063906564769974680081442166662368155595513633734025582065332680836159373734790483865268263040892463056431887354544369559827491606602099884183933864652731300088830269235673613135117579297437854413752130520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128203925285393434620904245248929403901706233888991085841065183173360437470737908552631764325733993712871937587746897479926305837065742830161637408969178426378624212835258112820516370298089332099905707920064367426202389783111470054074998459250360633560933883831923386783056136435351892133279732908133732642652633989763922723407882928177953580570993691049175470808931841056146322338217465637321248226383092103297701648054726243842374862411453093812206564914032751086643394517512161526545361333111314042436854805106765843493523836959653428071768775328348234345557366719731392746273629108210679280784718035329131176778924659089938635459327894523777674406192240337638674004021330343297496902028328145933418826817683893072003634795623117103101291953169794607632737589253530772552375943788434504067715555779056450443016640119462580972216729758615026968443146952034614932291105970676243268515992834709891284706740862008587135016260312071903172086094081298321581077282076353186624611278245537208532365305775956430072517744315051539600905168603220349163222640885248852433158051534849622434848299380905070483482449327453732624567755879089187190803662058009594743150052402532709746995318770724376825907419939632265984147498193609285223945039707165443156421328157688908058783183404917434556270520223564846495196112460268313970975069382648706613264507665074611512677522748621598642530711298441182622661057163515069260029861704945425047491378115154139941550671256271197133252763631939606902895650288268608362241082050562430701794976171121233066073310059947366875

4 楼

以上结果是算第10000项的时候

5 楼

会不会越界了??我原来也遇到过类似情况,数字改小就没事,一大就莫名其妙的出问题.可能需要改进一下算法才行

6 楼

越界??
数组开得肯定够了
因为算到极限数据30000才6270位
数组方面是没有问题的!
不过还是谢谢

7 楼

有是数组开大了,或者说运算过程中出现了过大的数都会莫名其妙的出些问题...这是我的一点经验.遇到这种情况就不能用常规方法来整了

8 楼

那么谁可以指教一下压位高精度计算的程序实现
(PS:压位高精度计算就是每个数组单元存储多位数字,改变数组单元之间逢10进1,而变成逢100、1000……进1。我的程序是逢100000000进1)

9 楼

改成逢10000进一保险一点

10 楼

谢谢各位
问题已解决

我来回复

您尚未登录,请登录后再回复。点此登录或注册