1

たとえば、文字列を変換せずに、1から7000までの2,7を含む数値を検索したいとします。2 7 12 17 ... 20 21 22 23 ... 7000数学を使った優れたアルゴリズムはありますか?前もって感謝します...

4

2 に答える 2

3

そんな感じ

while ( n > 0 ) {
   digit = n % 10;
   // check the digit
   n = n / 10;
}

523 の例

  1. 最初の反復では、数字 = 3 (123 % 10) になります。
  2. 2 番目の反復では、数字 = 2 (12 % 10) になります。
  3. 3 桁目 = 5 (5 % 10)
于 2012-12-03T15:20:29.497 に答える
2

Matteo のコードをループに入れると、うまくいくと考えてください。ちなみに、明らかな数字をスキップしてパフォーマンスを向上させることができます。

たとえば、15783 のように 3 桁目に 7 が見つかった場合、すべての 127XX をスキップして (それらはすべて有効です!)、15800 に移動できます。

直接ビルドすることもできます。1 から 7000 まで:

xxx2 xxx7
xx2x xx7x
x2xx x7xx
2xxx 7000

x0 ~ 9 桁に置き換えます。(0072や0172ならxxx2=xx7xのように重なりに気をつけて…)

編集:

ヒント: これを行うために文字列は必要ありません。1332 == 1 * 10^3 + 3 * 10^2 + 3 * 10^1 + 2 * 10^0

于 2012-12-03T15:37:41.840 に答える