计算范围内的数字

时间:2012-02-29 03:06:28

标签: integer

假设我有两个(正)任意十进制数,a和b。

我希望能够计算a和b之间存在的整数的数量(小于或等于[有效整数],小于b),使得它们都不超过任意数L.是否存在简单的方法吗?我已经尝试过循环和地板/天花板,但没有一个按照我想要的方式工作,而且它只是变得一团糟。

1 个答案:

答案 0 :(得分:1)

简单的案例是:

Count = Math.Min(Math.Max(a, b), L) - Math.Min(a,b);

但是,如果L小于ab,并且不符合十进制数字,则会出现问题。

因此,请试一试:

int Count(double firstInput, double secondInput, double limit = int.MaxValue)
{
    int minInput = (int)Math.Ceiling(Math.Min(firstInput, secondInput));
    int maxInput = (int)Math.Floor(Math.Max(firstInput, secondInput));

    int L = (int)Math.Floor(limit);

    if (L<minInput)
        return 0;

    bool maxInputHasDecimals = (maxInput != Math.Max(firstInput, secondInput));
    return Math.Min(maxInput, L) - minInput + (maxInputHasDecimals ? 1 : 0);
}

Count(56.67, 67.8); // 11
Count(56.67, 67.8, 62.0); // 6
Count(56.67, 67.8, -3); // 0
Count(-10, -5, -3); // 5
Count(-10, -5, -7); // 3
Count(56.67, 67.0); // 10