【解決方法】エラー表現 uint C#


C#
class Program {
  public static void Main (string[] args) {
    uint number = (uint)34;
    uint result = number;
            for (uint i = 1; i < number; i++)
            {
                result = result * (number - i);
                //Console.WriteLine(result);
                
            }
           Console.WriteLine(result);
  }
}

このアルゴリズムの実行には、Uint を使用したため、0 以上の return が必要です。 私は今C#を勉強し始めましたが、この問題を解決するためにどうすればよいかわかりません。

私が試したこと:

問題は変換にあると思います

解決策 1

値が何であるかを確認できるように、コードを少し変更します。 問題が明らかになるはずです。

C#
Console.WriteLine($"The maximum value for a uint is: {uint.MaxValue}");

uint number = (uint)32;
uint result = number;
for (uint i = 1; i < number; i++)
{
    result = result * (number - i);
    Console.WriteLine($"result: {result}\tnumber: {number}\ti: {i}");

}
Console.WriteLine(result);

タイプの最大値を超えると、値が「ロールオーバー」して、そのタイプの最小値から再開されます。

解決策 3

大きな数の場合は、次のようにしてください。

using System;
using System.Diagnostics;
using System.Numerics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            uint number = 34;
            BigInteger result = number;

            for (uint i = 1; i < number; i++)
            {
                result = result * (number - i);
                Debug.Print($"{i} {result}");
            }

            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

コメント

タイトルとURLをコピーしました