スキルテストシステムの次のプログラミング問題を発見しました。時間/空間の複雑さの低減。プログラミングコンテスト
正の整数Nが与えられます。数列[0,1、...、N]を考える。これらの数値の小数点表現のゼロの総数はいくらですか?
Nは非常に大きくなる可能性があります。したがって、Nの10進表現を含む長さLの空でない文字列Sの形式で与えられます。Sには先行ゼロは含まれません。
関数を書く:いくつかの正の整数Nの10進表現である文字列Sを、所与、
int number_of_zeros(char *S);
int number_of_zeros(const string &S);
、[数値の小数点表現においてゼロの総数を返す0、1 ...、N]。結果が1,410,000,016を超える場合、関数は、結果の除算から1,410,000,017を剰余として返す必要があります。
* L is an integer within the range [1..10,000];
* string S consists only of digits (0-9);
* string S contains no leading zeros.
複雑:
* expected worst-case time complexity is O(L);
* expected worst-case space complexity is O(L) (not counting the storage required for input arguments).
S = "100" 機能12を返すべきであり、S = "219" は42
と仮定するを返すべきであるためするための例えば
、
私はそれを解決しようとしましたが、関数を書きましたが、実行時間の複雑さは私の解決策ではO(L)よりも洗練されています 誰でも解決できますか?擬似コードまたは説明)?
大成功です!
コンピュータなしでこの問題をどのように手作業で解決しますか?私はあなたがそうしようとするとすぐにいくつかのパターンにつまずくだろうと確信しています... – hugomg
複雑なO(L)の入力文字列の中の10進数から0の数を計算する方法/アルゴリズムがあります。 (%、/ - +、*演算を使用して)検索しようとしています... –