현관의 계산을 20 이상 이상 계산할 때, 팩토리 노트의 결과 값은 매우 큰 경향이 있습니다. 매우 적은 수의 요인 결과는 현재 개인용 컴퓨터의 정수 범위를 초과 할 수 있습니다. 예를 들어 큰 요인이 필요한 경우 1000 이상을 간단한 재귀 방식으로 해결할 수 없습니다. 인터넷에서, 나는 C, C ++ 및 C#로 작성된 대형 정수 요인에 대한 많은 알고리즘을 보았습니다. 배열은 경계를 가로 지르며 프로그램 자체가 실행할 수 없다는 것을 한눈에 볼 수 있습니다. 다른 사람들의 기사를 재판 할 때 코드를 자세히 살펴보십시오. 아아, 거칠다. 구정이었고, 집에서 너무 피곤하다고 느낍니다. 나는 신중하게 분석하고 Java를 사용하여 초대형 정수 계승을 계산하는 프로그램을 구현했습니다. 이 아이디어는 인터넷에서 가져 왔으며 개인적으로 최적화되고 개선됩니다.
이 방법은 "배열 캐리"알고리즘을 사용합니다. 컴퓨터 변수의 값 범위가 초과되면 다중 자리 곱셈이 단일 자리 곱셈으로 변환됩니다. 11과 같은! = 39916800. 12의 요인이 필요한 경우 39916800과 12를 곱해야하며 곱셈 할당 속도를 사용할 수 있습니다. 곱셈 수직 공식은 아래 그림에 나와 있습니다.
배열을 사용하여 각 요인의 결과를 저장하고 한 자리 숫자를 저장하기위한 배열 요소를 저장하십시오. 예를 들어 : 11의 계승 결과의 399
16800은 배열의 8 가지 요소에 저장됩니다. 12의 계승을 계산하려면 각 배열 요소의 값에 12를 곱하고 결과를 원래 배열 요소에 저장하십시오. 다음으로, 각 배열 요소가 운반 해야하는지 여부를 결정합니다. 운반 작업을 통해 배열의 각 요소에 의해 저장된 숫자는 단 하나 일뿐입니다. 회로도는 다음과 같습니다.
이론적으로, 컴퓨터 메모리 공간이 허용하는 한, 계승 결과는 더 이상 변수 범위에 의해 제한되지 않고 운영 체제의 주소 지정 기능과 컴퓨터 메모리에 의해서만 제한 될 수 있습니다. 친숙한 팁 : 필요한 요인 번호가 크면 장치 번호의 제품을 계산할 때 오버플로를 피하기 위해 배열을 긴 유형으로 정의 할 수 있습니다.
구현 코드는 다음과 같습니다.
공개 클래스 biginteger {/*** 계산* @param bit array* @param pos는 그것이 배열의 가장 높은 비트*/private void carry (int [] bit, int pos) {int i, carray = 0; (i = 0; i <= pos; i ++)인지 확인하는 데 사용되었습니다. <= 9) // 9 {carray = 0;} else if (bit [i]> 9 && i <pos) // 9보다 크지 만, 가장 높은 비트 {carray = bit [i]/10; // 캐리 값을 저장 [i]%[i]%10; //이 비트의 단일 숫자를 얻는다. 비트 {while (bit [i]> 9) // 루프 포워드 비트 {carray = bit [i]/10; // 캐리 값 비트 [i] = 비트 [i] % 10; // 현재 첫 번째 숫자 i ++; 비트 [i] = carray; // 다음 비트}}}}}}}}}}}}}}}*/warlinger biginger the large integer the large integer void bigfactorial (int biginteger) {int pos = 0; int digit; // data 길이 in a, b; int m = 0; int m = 0; // 통계 출력 숫자 int n = 0; // 통계 출력 행 이중 합계 = 0; a = 1; a <= biginteger; a ++) // 계산 공동 숫자 {sum += math += math10 (a); (int) sum+ 1; // data length int [] fact = new int [digit]; // 배열 사실 [0] = 1; // 단일 숫자가 1for (a = 2; a <= biginteger; a ++)라고 가정합니다. 사실 [b]! = 0) {pos = b; // (b = 0; b <= pos; b ++)에 대한 가장 높은 비트 브레이크를 기록합니다. break;}}}} system.out.println (biginteger+"Factory result is :"); for (a = pos; a> = 0; a -) // 출력 계산 결과 {system.out.print (사실 [a]); m ++; if (m % 5 == 0) {system.out.print ( ""); ; n ++; if (10 == n) {System.out.print ( "/n"); n = 0;}}} system.out.out.println ( "/n"+"factorials는 다음과 같습니다. this.bigfactorial (biginteger); int timefinishi = (int) system.currenttimeMillis (); int time = timefinishi timebegin; system.out.println ( "계산 시간 :" + time + "msec");} public static void main (string [] args) {bigintger bi = new biginteger (); bi.dobigfactorial (100000);}}10,000의 계승을 계산하고 다음을 표시하십시오.
결과적으로 콘솔은 분명히 컨텐츠를 저장할 수 없습니다. 450,000 단어의 450,000 팩토 노트가 있으며 450,000 단어의 소설에 해당합니다. 1000의 계승 결과는 다음과 같습니다.
콘솔은 전체적으로 표시 될 수 있습니다.
요약
위는이 기사의 모든 내용입니다. Super Large Integer Factority 알고리즘 코드 - 레벨 10,000의 Java 버전에 대한 자세한 설명에 대한 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구들은이 사이트를 계속 참조 할 수 있습니다.
" Java의 전력 지수 값의 운영 코드 분석 "
" 자바 프로그래밍 구현 코드 코드는 16 진 문자열의 독점 또는 작동을위한 예제 "
" 사용자 기반 협업 필터링 권장 알고리즘 코드 예제 구현 Java 프로그래밍 "
단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!