스킬 테스트 시스템 중 하나에서 다음 프로그래밍 문제가 발견되었습니다.시간/공간 복잡성 감소. 프로그래밍 경연
양수 N이 주어집니다. 숫자의 시퀀스 [0, 1, ..., N]을 고려하십시오. 이 숫자의 십진수 표현의 총 0은 얼마입니까?
N은 매우 클 수 있습니다. 따라서 N의 10 진수 표현을 포함하는 길이가 L 인 비어 있지 않은 문자열 S의 형태로 제공됩니다. S에는 선행 0이 없습니다.
함수를 적는다
어떤 양의 정수 N의 진수 표현 문자열 S, 주어진 숫자 [0, 1의 진수 표현으로 0의 수를 반환int number_of_zeros(char *S);
int number_of_zeros(const string &S);
, ..., 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.
복잡성 : 그
예를 들어, S에 대해 = "100"기능 (12)을 돌려 및 S에 대해 = "219"는 42
가 가정 돌려
* expected worst-case time complexity is O(L);
* expected worst-case space complexity is O(L) (not counting the storage required for input arguments).
나는 그것을 풀려고했지만 함수를 작성했지만 실행 시간의 복잡성은 O (L)보다 더 복잡하다. 누군가 알고리즘을 제공 할 수 있을까? 의사 코드 또는 설명)?
성공 사례!
컴퓨터없이이 문제를 어떻게 손으로 해결할 수 있습니까? 나는 당신이 그렇게하려고 할 때 당신이 어떤 패턴을 빨리 발견하게 될 것이라고 확신한다 ... – hugomg
복잡성이있는 입력 문자열 안의 10 진수에서 0의 수를 계산하는 알고리즘/알고리즘이 있어야한다. O (L) (%,/- +, * 연산자를 사용하여) 찾으려고합니다 ... –