计算C#中的大数字

时间:2017-05-12 13:27:08

标签: c# biginteger

我的程序中有三个数字相乘的问题,即使在BigInteger类型之后也是如此。

我没有得到任何有意义的数字。

请检查以下代码:

using System;
using System.Numerics;
class Program
{
static void Main()
{
    denss:
    string  density;
    int den;
    Console.WriteLine("Please enter the density value in kg/m3");
    density = Console.ReadLine();
    bool dens = int.TryParse(density, out den);
    if (dens == false)

    {
        Console.WriteLine("Please enter numbers only");
        goto denss;
    }

    Console.WriteLine(den);

    velss:

    string velocity;
    int vel;
    Console.WriteLine("Please enter the velocity value in m/s");
    velocity = Console.ReadLine();
    bool vels = int.TryParse(velocity, out vel);
    if (vels == false)

    {
        Console.WriteLine("Please enter numbers only");
        goto velss;
    }

    Console.WriteLine(vel);

    lengt:

    string length;
    int len;
    Console.WriteLine("Please enter the length value in m");
    length = Console.ReadLine();
    bool leng = int.TryParse(length, out len);
    if (leng == false)

    {
        Console.WriteLine("Please enter numbers only");
        goto lengt;
    }

    Console.WriteLine(len);

    BigInteger rel = den * vel * len;

    Console.WriteLine(rel);

    if (rel>100000)
        Console.WriteLine("turbuelent flow. Reynolds no is ", rel);
    else
        Console.WriteLine("laminar flow. Reynolds no is  ", rel);

    Console.ReadKey();

    }
}

我得到的输出显示在这张照片中:enter image description here

2 个答案:

答案 0 :(得分:4)

在其他问题中,您的主要问题是以下几行:

BigInteger rel = den * vel * len;

此处发生的事情den * vel * len计算为int,因为所涉及的所有值均为int。这个int溢出并且毫无意义。然后将此无意义的数字分配给BigInteger rel。你需要的是:

BigInteger rel = new BigInteger(den) * new BigInteger(vel) * new BigInteger(len);

或将它们声明为double,这首先应该是针对此问题域的。

答案 1 :(得分:1)

您实际上并未在控制台上输出值。您用作输出的字符串(WriteLine的第一个参数)必须包含标记,显示将第二个参数(数字)插入字符串的位置。例如:

Console.WriteLine("turbuelent flow. Reynolds no is {0}", rel);

{0}显示参数应该去的位置。如果要输出多个参数,可以使用{0}{1}等。

实际上,你的代码可以像这样重写一点:

string flowType = "";
if (rel > 100000) flowType = "turbulent";
else flowType = "laminar";
Console.WriteLine("{0} flow. Reynolds no is {1}", flowType, rel);

有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/586y06yf(v=vs.110).aspx