10 진수를 7로 나눌 수 있는지 확인하려면
마지막 숫자를 지 웁니다. 2를 곱하고 남은 것을 빼십시오. 결과를 7로 나눌 수있는 경우 원래 숫자는 7로 나눌 수 있습니다.
이 규칙은 수동 분할 검사에 적합합니다. 예를 들면 다음과 같습니다.
2016을 7로 나눌 수 있습니까?
덜다
6*2
201에서 ; 우리는 189를 얻습니다. 이것은 7로 나눌 수 있습니까? 이를 확인하기 위해 규칙을 다시 적용 해 봅시다.
9*2
18에서 빼기 ; 우리는 0을 얻습니다. 따라서 2016은 7로 나눌 수 있습니다.
이 도전에서는 분할 상태가 명확 해질 때까지 , 즉 숫자가 70보다 크지 않을 때까지 (그러나 자세한 내용은 아래 참조) 이 규칙을 적용해야합니다 . 기능 또는 전체 프로그램을 작성하십시오.
입력 : 양의 정수; 코드는 최대 32767의 입력을 지원해야합니다 (임의의 정밀 정수 지원은 보너스입니다. 아래 참조).
산출 : 70보다 크지 않은 정수 (음수 일 수 있음), 이는 7로 나눈 규칙을 0 번 이상 적용한 결과입니다.
테스트 사례 :
Input Output Alternative output
1 1
10 10 1
100 10 1
13 13 -5
42 42 0
2016 0
9 9
99 -9
9999 -3
12345 3
32767 28 -14
---------- Values below are only relevant for the bonus
700168844221 70 7
36893488147419103232 32 -1
231584178474632390847141970017375815706539969331281128078915168015826259279872 8
두 개의 가능한 출력이 지정된 경우 두 결과 중 하나가 정확합니다. 두 번째 출력은 규칙을 한 번 더 적용하는 것에 해당합니다. 한 자리 숫자에 규칙을 적용하는 것은 금지되어 있습니다. 자리를 지우면 0이 아닌 것은 남지 않습니다.
보너스 : 알고리즘
- 임의 정밀도 정수 지원
- 입력을 한 번만 수행합니다.
- 공간의 복잡성 가지고
o(n)
즉 미만을 (O(n)
); 과 - 시간 복잡성
O(n)
,
어디에 n
십진수의 수는 다음과 같습니다.
코드의 바이트 수에서 50 %를 빼십시오.
실제 보너스 :
또한 알고리즘이 가장 중요한 자릿수부터 시작하여 정상 방향으로 입력을 읽는 경우 다시 50 %를 뺍니다. 점수는 바이트 수의 25 %입니다 (가능한 것 같지만 확실하지는 않습니다).
1000000000000000000001
.
long long
s 또는 이와 동등한 유형이 내장되어 있으면 어떻게 됩니까?