BigInteger

# 最初の 1,000 桁のフィボナッチ数を計算

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

この単純なアルゴリズムは、長さが 10 進数で少なくとも 1000 桁に達するまでフィボナッチ数を繰り返し処理し、それを出力します。この値は ulong よりもかなり大きい

理論的には、BigInteger の唯一の制限です。 class は、アプリケーションが消費できる RAM の量です。

注:BigInteger .NET 4.0 以降でのみ使用できます。

# コメント

# いつ使用するか

BigInteger オブジェクトは、その性質上、RAM に非常に負荷がかかります。したがって、絶対に必要な場合、つまり真に天文学的な規模の数値にのみ使用する必要があります。

これに加えて、これらのオブジェクトに対するすべての算術演算は、対応するプリミティブよりも桁違いに遅くなります。この問題は、サイズが固定されていないため、数が増えるにつれてさらに複雑になります。したがって、不正な BigInteger の可能性は十分にあります。 使用可能な RAM をすべて消費してクラッシュを引き起こします。

# 代替

ソリューションに速度が不可欠な場合は、 Byte[] をラップするクラスを使用してこの機能を自分で実装する方が効率的かもしれません 必要な演算子を自分でオーバーロードします。ただし、これにはかなりの追加の労力が必要です。