수색…


비고

언제 사용 하는가?

BigInteger 객체는 본질적으로 RAM에서 매우 무겁습니다. 결과적으로, 절대적으로 필요한 경우, 즉 진정한 천문학적 규모의 숫자에만 사용해야합니다.

더 나아가,이 객체들에 대한 모든 산술 연산은 원시 객체보다 더 느리게 진행되며, 고정 된 크기가 아니기 때문에 숫자가 커짐에 따라이 문제는 더욱 복잡해집니다. 따라서, 가짜 BigInteger 가 사용 가능한 RAM을 모두 소비하여 충돌을 일으킬 가능성이 있습니다.

대안

속도가 솔루션에 반드시 필요한 경우 Byte[] 래핑하고 필요한 연산자를 직접 오버로딩하는 클래스를 사용하여이 기능을 직접 구현하는 것이 더 효율적일 수 있습니다. 그러나 이것은 상당한 노력을 필요로합니다.

최초 1000 자리 피보나치 수 계산

포함 using System.Numerics 하고 참조 추가 System.Numerics 프로젝트에.

using System;
using System.Numerics;

namespace Euler_25
{
    class Program
    {
        static void Main(string[] args)
        {
            BigInteger l1 = 1;
            BigInteger l2 = 1;
            BigInteger current = l1 + l2;
            while (current.ToString().Length < 1000)
            {
                l2 = l1;
                l1 = current;
                current = l1 + l2;
            }
            Console.WriteLine(current);
        }
    }
}

이 간단한 알고리즘은 피보나치 숫자를 반복하여 최소 1000 자릿수의 길이에 도달 할 때까지 반복하여 출력합니다. 이 값은 ulong 이 보유 할 수있는 값보다 훨씬 큽니다.

이론적으로 BigInteger 클래스의 유일한 제한은 응용 프로그램이 소비 할 수있는 RAM의 양입니다.

참고 : BigInteger 는 .NET 4.0 이상에서만 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow