所以我的任务是:我有100,并且必须打印阶乘的数字总和。
因此,我编写了代码,找到了一种很好的将数字相加的方法,但是我的代码不适用于100。我检查了10,它可以正常工作。我想到的第一步是,我必须将类型从int更改为更大的类型。我知道(阶乘)的结果将是一个很大的正数,所以我选择ulong,但仍然不起作用。我在此处检查了Stack Overflow,发现的唯一答案建议使用“ BigInteger”,但我的Visual Studio似乎不知道,我想知道为什么ulong不起作用。
我的代码:
class Program
{
static ulong factorial(ulong n) //finds the factorial of x
{
ulong fact = n;
for (ulong i=1; i<n; i++)
{
fact = fact * i;
}
return fact;
}//***
static ulong digitsum(ulong n) // sums the digits of n
{
ulong sum = 0;
while (n != 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}//***
static void Main(string[] args)
{
ulong x = 100;
Console.WriteLine(digitsum(factorial(x)));
Console.ReadLine();
}
}
答案 0 :(得分:2)
我一直在玩自己的大型数学研究项目。您可以使用.NET BigInteger类(在System.Numerics下),但它不是那里效率最高的库。
如果您不习惯使用.NET,建议您使用GNU多精度算术库(https://gmplib.org/)。它不仅速度更快,而且功能更多。您将需要研究文档以学习正确使用它。
它的端口确实存在,尽管从API角度来看我还没有看到很好的端口-在Nuget上进行搜索。
答案 1 :(得分:0)
所有整数类型都有限制。 unsigned long int增加了上限。但是显然还远远不够。正如其他人在评论中所说,乌龙茶将短缺100个数量级。
对于如此庞大的数字,有两种选择:
我个人倾向于将操作压缩到BigInt中,而不是使用浮点数。但这是个人事务。