我的物理老师给了班级一项艰巨的任务。我试图创建一个程序来为我计算一些东西。在某一点上,我需要将一定数量的分子乘以一定百分比。 Ulong不能容纳6022 * 10 ^ 19的数字,所以我必须使用.net 4.0中的BigInteger。但乘法不能应用于BigInteger和double。我只需要整数。有没有办法绕过这个? 代码如下:
private static BigInteger pencapmoles = BigInteger.Pow(6022/9, 19);
private static BigInteger inkmoles = pencapmoles;
private static BigInteger tries = 0;
private static BigInteger molesinbucket = BigInteger.Pow(26761768, 19);
private static double percentage;
static void Main(string[] args)
{
while (inkmoles > 1)
{
percentage = (double)(inkmoles / molesinbucket);
inkmoles = pencapmoles * percentage;
tries++;
}
Console.WriteLine($"It only took us {tries} tries.");
}
答案 0 :(得分:4)
最好将所有计算切换到double
或BigInteger
。 C#double
有足够的范围来保持大于10 19 的值,但答案是稍微不精确。几乎可以肯定的是,它足以解决你的任务。
如果切换到BigInteger
,请先乘以,然后进行除法:
inkmoles = (inkmoles * pencapmoles) / molesinbucket;