对于非常大的数值,什么是正确的数据类型以及如何使用它?

时间:2017-05-19 19:29:46

标签: c# factorial

我正在处理来自hackerrank的问题。我无法显示正确的输出我不知道在此程序中使用哪种数据类型。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution 
{
    static void Main(String[] args) 
    {
        double n = int.Parse(Console.ReadLine());

        double factorial = 1;
        for (int i = 1; i <= n; i++)
        {
            factorial *= i;
        }

        Console.WriteLine(factorial);
    }
}

我收到了这个输出

        1.5511210043331E+25

但是预期的输出是

        15511210043330985984000000

我想用很久但我不知道怎么做。请建议我如何处理它。

提前致谢。

1 个答案:

答案 0 :(得分:-1)

正如有人在评论中建议的那样,使用BigInteger也是一个好主意。

以下是关于BigInteger的文档: https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

BigInteger解决方案:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics; // This is important

class Solution 
{
    static void Main(String[] args) 
    {
        int n = int.Parse(Console.ReadLine()); // No reason to accept a double here

        BigInteger factorial = 1; 

        for (int i = 1; i <= n; i++)
        {
            factorial *= i;
        }

        Console.WriteLine(factorial.ToString());
   }
}