1

まず第一に、これは宿題の質問ではありません。私はアルゴリズム的に解決するためにいくつかの組み合わせ問題を経験していましたが、本当にこの問題の解決に向けて始める必要があります。

私の最初の考えは、サイズ 17 の配列を宣言して初期化し、ループを実行して、単純な検索を使用して「5」などの数字の出現を見つけることでした。しかし、解決策は退屈で醜く見えます。

  1. 大きな数 (10^16) を表現する方法について何か考えはありますか?
  2. この種の問題を解決するための単純な組み合わせ式/アルゴリズムはありますか?

ありがとう。

4

2 に答える 2

1

0 <= l < 10^16 (<= 10^16 ではない) を意味すると仮定すると、この範囲内のすべての整数は 10 桁になります (先頭の 0 を許可します)。この範囲には合計 10^16 個の値があります。問題を次のように書きます。

数字n = 10^16 - 数字nなしの数字。

では、1 の代わりにnを選択しない方法はいくつあるでしょうか? 9通り。10 の位または 1 の位に「n」を入れない方法は何通りありますか? 9*9. このロジックに従うと、16 の可能なスロットのいずれにもnを入れない方法が 9^16 あります。

したがって、答えは 10^16 - 9^16 です。

実際に 0 <= l <= 16 を意味する場合、その範囲にはもう 1 つの数値、つまり 10^16 しかありません。この数値の先頭の桁は 1 であるため、n = 1 の場合、正確に 10^16 - 9^16 + 1 個の値に 1 が含まれます。n != 1 の場合、前の答えが保持されます。

于 2013-07-23T06:09:46.583 に答える