たとえば、文字列を変換せずに、1から7000までの2,7を含む数値を検索したいとします。2 7 12 17 ... 20 21 22 23 ... 7000数学を使った優れたアルゴリズムはありますか?前もって感謝します...
3732 次
2 に答える
3
そんな感じ
while ( n > 0 ) {
digit = n % 10;
// check the digit
n = n / 10;
}
523 の例
- 最初の反復では、数字 = 3 (123 % 10) になります。
- 2 番目の反復では、数字 = 2 (12 % 10) になります。
- 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
x
0 ~ 9 桁に置き換えます。(0072や0172ならxxx2=xx7xのように重なりに気をつけて…)
編集:
ヒント: これを行うために文字列は必要ありません。1332 == 1 * 10^3 + 3 * 10^2 + 3 * 10^1 + 2 * 10^0
于 2012-12-03T15:37:41.840 に答える