[ad_1]
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(); } } }
[ad_2]
コメント