値の探索方法を利用して,“2の100乗の結果の中のゼロのふたつ並び”を探してみましょう."12676....376"の中でゼロがふたつ並んでいるところを探します.プログラム"Doubling100"を利用します.
プログラム"Doubling100"では,結果は配列aに1桁ずつ格納されていましたから,結局
a[i]==0 && a[i+1]==0
となるiを求めればいいことになります.2か所以上あるかも知れませんが1番右,いいかえればiの値が一番小さい場所を求めるものとします.配列の長さは充分大きくとってあったので,大きい方の数桁はすべてゼロで,これが番兵に使えます.ただしそのためには,結果の最高桁の位置を知る必要があります.これは,頭の桁から“ゼロでないもの”を順に探すことによって得られます.
プログラムDoubling100の最後に,以下の部分をつけ加えればでき上がりです.
k=a.length-1;
while(a[k] == 0)
  k=k-1;   // 最高位桁を求める
i=0;
while(a[i] != 0 || a[i+1] != 0)
  i=i+1;
if(i > k)
   System.out.println("No \"00\" in 2**100");
else
   System.out.println("\"00\" is at "+ i +" in 2**100");
結果を示します.
0000000001267650600228229401496703205376 "00" is at 21 in 2**100
"21"は,上記結果の中央付近にある"0600228"の中の"00"の位置です.
| 26.1.6.17 ない場合 | 
     | 
    26.1.6.18 探索の例 | 
     | 
  26.1.6.19 二分探索 | 
| 
     2009年度版に向けて現在作業中です.
  このページに関してお気づきの点がありましたら
  コメント投稿システムまでお願いします.
   
     | 
  Tue, 08 Jun 2004 13:20:38 JST (1879d) | |||