나는 Codility.com demo test을 가져갔습니다.혼동에 대한 시뮬레이션 데모 테스트
TEST extreme_large_numbers 이며 매우 많은 수의 테스트 산술 오버 플로우와 순서 :
내 프로그램
은 단위 테스트 중 하나에 대한 잘못된 값을 반환했습니다.TIME 0.056s.
RESULT 오답 2를 가지고 있지만, 합계 [0..1] = 4294967294, 합계 [3..3] = 평형 점 아니다 - 2
좋아,이 나오지 않았어 때문에 처음에는 내 코드에서 문제를 보았고 Visual Studio 프로젝트에서이 코드를 실행 해 보았습니다. 그렇다면 컴파일러는 int
에 대해 4294967294
이 너무 큽니다. uint
또는 long
이어야합니다. 그래서 모든 것을 long
으로 바꿨고 VS에서 잘 돌아갔습니다.
그러나 데모 테스트에서는 함수 입력/반환 형식을 long
으로 변경할 수 없습니다.
- 2,147,483,647 (최대 부호있는 32 비트 INT)
- 4294967294 (Codility.com 단위 테스트에 의해 주어진 수)
누군가가이 프로그램이 가능 4294967294
으로 제대로 작동하는 방법을 설명시겠습니까 int[]
에있는 데이터 값 중 하나?
1. 내 솔루션이 가장 효율적이지는 않지만 필자는 훌륭한 프로그래머가 아니며 30 분 밖에 안됐다. 2. 나는 네가 내 질문에 대답했다고 생각하지 않는다. '4294967294'를 저장할 충분한 데이터 타입이 없다면 어떻게 값을 비교할 수 있습니까 ?? – JohnB
1. 나는 그것을 지적했다 ... 2. 실제로는 음수 값이지만, 큰 값의 합은'int' 범위를 초과한다. – Lucero
내가 본 ...'2147483647 * 2 = 4294967294' 그들은 의도적으로'int' 데이터 타입을 날려 버리고 있습니다. ( – JohnB