지난 달 챌린지에서는 오버플로 오류로 인해 추가적인 문제가 발생할 수 있는 상황을 피해야 했습니다. 실제로 Miller-Rabin 기반의 모듈러 지수화 알고리즘은 프라임 이 문제를 피하기 위해 루틴이 작성되었습니다. 필연적으로 프로그래밍 언어에 관계없이 이 문제가 발생하게 됩니다.
결과를 표시하는 데 사용할 수 있는 것보다 더 많은 비트가 필요한 작업을 수행하려고 하면 오버플로 오류가 발생합니다. 이는 큰 정수로 작업할 때 자주 발생하지만 이에 국한되지는 않습니다. 예를 들어 다음 예를 시도해 보세요.
//Example 1
x = 9007199254740992;
For(i=1,i<=10,i++,Print(x+i));
x = 9007199254740992;
For(i=1,i<=10,i++,Print(x-i));
//Example 2
n1 = 9007199254740999;
n2 = 1;
Print(n1-n2);
2 53 는 가장 큰 정수입니다. JMP 오버플로가 발생하기 전에 나타낼 수 있습니다. 부동 소수점 표현에 대한 좋은 설명은 다음과 같습니다. (JMP의 모든 숫자는 부동 소수점입니다.) 이번 달의 과제에서는 JMP의 정수 표현을 오버플로하는 숫자를 더하고 빼는 방법을 생각해 보시기 바랍니다. 두 가지 함수 만들기
- 빼기큰 ( n1 , n2 ) 어디 n1 그리고 n2 둘 다 텍스트 형식의 정수(양수, 음수 또는 0)입니다. 텍스트 형식으로 값을 반환합니다.
- addBig ( n1 ,< n2 >) 어디
n1 – 텍스트 형식의 정수 또는 경우 n2 비어 있음, 텍스트 형식의 정수(양수, 음수 또는 0) 목록입니다.
n2 – 텍스트 형식의 정수
텍스트 형식으로 값을 반환합니다.
예
빼기큰 (“9007199254740999”, “9007199254740998”)은 “1”을 반환합니다.
addBig ("9007199254740992","7")은 "9007199254740999"를 반환합니다.
addBig ({"9007199254740999","-1","11"})은 "9007199254741009"를 반환합니다.
채점
- 다음 버전에 대해 5점 addBig 1) 30초 이내에 최대 1000자리 숫자 두 개를 더할 수 있고 2) 30초 이내에 최대 100자리, 100자리 숫자가 포함된 목록의 합계를 찾을 수 있습니다. 파트 1)은 10개의 서로 다른 숫자 세트로 테스트됩니다. 각 숫자의 자릿수가 반드시 동일할 필요는 없습니다. 모든 제출물에는 동일한 10개 세트가 사용됩니다.
- 3점 추가 빼기큰 , 이는 30초 이내에 (x – y)를 계산해야 합니다. 여기서 x와 y는 최대 1000자리 숫자입니다. 10개의 서로 다른 숫자 집합이 사용됩니다. 각 숫자의 자릿수가 반드시 동일할 필요는 없습니다. 모든 제출물에는 동일한 10개 세트가 사용됩니다.
- 3 보너스 포인트 addBig 가장 큰 숫자(자릿수)를 정확하게 추가할 수 있는 제출물 n1 그리고 n2 5초 이내에 동일한 길이의 작업을 수행합니다. (2개에 2점 nd , 3에 대해 1 rd )
- 3 보너스 포인트 addBig 5초 이내에 최대 1000자리 숫자를 정확하게 추가할 수 있는 제출물(2점당 2점) nd , 3개에 1점 rd ).
- 제출물이 JMP 직원이 제출한 제출물보다 빠르거나 빠른 경우 각각 3점을 추가로 받습니다.
제출 마감일은 6월 15일 월요일 오후 11시 59분(미국 동부 시간)입니다. 행운을 빌어요!
단지 알림입니다. 오늘 밤이 챌린지 3 제출 마감일입니다.
이것은 약간 혼란스럽기 때문에 분명히 설명할 가치가 있을 것입니다. 두 가지 기능 모두(그리고 두 경우 모두 addBig )은 길이와 부호가 다른 숫자를 처리할 수 있어야 합니다. 나는 이것을 테스트할 것이다. 보너스 속도와 크기 포인트를 결정할 때 동일한 길이의 숫자를 사용합니다.
두목
어젯밤에 귀하의 챌린지 설명을 다시 읽었는데, 요구 사항에 대해 명확하게 설명하시는 것 같습니다.내 질문을 무시해도 됩니다.미안합니다!
-데이브
내 질문에 대한 응답으로 - 방금 세 번째 예를 읽었습니다. (나) n1 목록에 있는 모든 숫자의 자릿수가 동일하다고 가정할 수는 없습니다.또한, (ii) n1 목록에 음수가 포함되어 있을 수 있습니다.아마 그럼 (iii) 두 숫자 n1과 n2의 경우 둘 중 하나 또는 둘 다 음수가 될 수 있습니까?
아마도 내가 언급한 3가지 사항을 명확히 할 수 있을 것입니다. 감사해요.
숫자 목록을 추가하는 경우 각 숫자의 길이가 같다고 가정할 수 있습니까? 아니면 이를 테스트해야 합니까? (즉, 일반적인 경우를 처리해야 합니까, 아니면 설명하신 테스트 시나리오만 처리해야 합니까?)