値の探索方法を利用して,“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) |