지난 달의 과제에서 오버플로 오류로 인해 추가 합병증이 발생할 수있는 상황을 피해야했습니다. 실제로 Miller-Rabin 기반의 모듈 식 지수 알고리즘 isPrime 이 문제를 피하기 위해 루틴이 작성됩니다. 필연적으로 프로그래밍 언어에 관계 없이이 문제를 해결할 것입니다. 결과를 나타내는 데 사용할 수있는 것보다 많은 비트가 필요한 작업을 수행하려고하면 오버플로 오류가 발생합니다. 이것은 종종 큰 정수로 작업 할 때 발생하지만 배타적이지는 않습니다. 예를 들어 다음 예제를 시도하십시오.
//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)입니다. 텍스트 형식의 값을 반환합니다.
- 더하다 ( n1 , < n2 >) 여기서
n1 – 텍스트 형식의 정수 또는 n2 텍스트 형식의 정수 (양수, 음수 또는 0) 목록이 비어 있습니다.
n2 – 텍스트 형식의 정수
텍스트 형식의 값을 반환합니다.
예 :
빼기 ( "9007199254740999", "9007199254740998")는 "1"을 반환합니다.
더하다 ( "9007199254740992", "7")은 "9007199254740999"를 반환합니다.
더하다 ({ "9007199254740999", "-1", "11"})은 "9007199254741009"를 반환합니다.
채점 :
- 버전 1 점 더하다 즉, 1) 30 초 미만으로 최대 1000 자리 숫자를 추가하고 2) 30 초 미만에서 최대 100, 100 자리 숫자를 포함하는 목록의 합계를 찾을 수 있습니다. 1 부)는 10 개의 다른 숫자 세트로 테스트됩니다. 각 숫자의 자릿수가 반드시 같을 필요는 없습니다. 모든 제출에 동일한 10 세트가 사용됩니다.
- 3 추가 포인트 빼기 (x – y)를 계산해야합니다. 여기서 x 및 y는 최대 1000 자리 숫자이며 30 초 미만입니다. 10 개의 다른 숫자 세트가 사용됩니다. 각 숫자의 자릿수가 반드시 같을 필요는 없습니다. 모든 제출에 동일한 10 세트가 사용됩니다.
- 에 대한 3 보너스 포인트 더하다 가장 큰 자릿수를 올바르게 추가 할 수있는 제출 n1 과 n2 5 초 안에 같은 길이로 (2 점 2 점) nd 3의 경우 1 rd )
- 에 대한 3 보너스 포인트 더하다 5 초 안에 1000 자리 숫자를 정확하게 추가 할 수있는 제출 (2는 2 점) nd 3 점 1 점 rd ).
- JMP 직원이 제출 한 것보다 빠르거나 빠른 경우 각각 3 점 추가.
제출 마감일은 6 월 15 일 월요일 오후 11시 59 분 (동부 표준시)입니다. 일 . 행운을 빕니다!