Ricerca…


Osservazioni

Quando usare

BigInteger oggetti BigInteger sono per loro natura molto pesanti sulla RAM. Di conseguenza, dovrebbero essere usati solo quando assolutamente necessario, cioè per numeri su scala veramente astronomica.

Oltre a ciò, tutte le operazioni aritmetiche su questi oggetti sono di un ordine di grandezza più lento delle loro controparti primitive, questo problema viene ulteriormente aggravato man mano che il numero cresce man mano che non sono di dimensioni fisse. È quindi possibile che un BigInteger possa causare un arresto anomalo consumando tutta la RAM disponibile.

alternative

Se la velocità è imperativa per la soluzione, potrebbe essere più efficiente implementare questa funzionalità da soli utilizzando una classe che include un Byte[] e sovraccaricando gli operatori necessari da soli. Tuttavia, questo richiede un notevole sforzo extra.

Calcola il primo numero di Fibonacci a 1.000 cifre

Includere using System.Numerics e aggiungere un riferimento a System.Numerics al progetto.

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);
        }
    }
}

Questo semplice algoritmo esegue l'iterazione dei numeri di Fibonacci fino a raggiungere una cifra di almeno 1000 cifre decimali, quindi lo stampa. Questo valore è significativamente più grande di ulong potrebbe mantenere un ulong .

Teoricamente, l'unico limite della classe BigInteger è la quantità di RAM che l'applicazione può consumare.

Nota: BigInteger è disponibile solo in .NET 4.0 e versioni successive.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow