0

我想根据用户在C#. 我有一个 asp 文本框,按钮。用户可以在文本框中输入小于 10,000 的数字。我想,当用户单击按钮时,用户会得到他输入值的范围。

例如 - 如果用户"35"在文本框中输入,他会得到"Number Range: (31-40)".

但是,我在制造范围上有一些特殊条件-

如果输入介于 -

a) 1 到 50 范围的长度是 10 - 例如输入数字是 - 49,范围是(41-50)

b) 51 到 100 范围的长度是 25 - 例如输入数字是 - 78,范围是(76-100)

c) 101 到 200 范围的长度是 50 - 例如输入数字是 - 135,范围是(101-150)

d) 201 到 400 范围的长度是 100 - 例如输入数字是 - 245,范围是(201-300)

等等........

我用过Switch Case这个但是,我没有成功创建正确的逻辑来获得这个功能。

感谢您的帮助...任何帮助将不胜感激。

4

5 回答 5

1

一种简单的方法是使用 if 和 else-if,例如:

if(number < 0)
{
// number below zero
}
else if(number < 10)
{
// range 0 - 9
}
else if(number < 40)
{
// range 10 - 39
}
else if(number < 200)
{
// range 40 - 199
}
else if(number < 1000)
{
// range 200 - 999
}
else
{
// range 1000 -
}
于 2013-08-06T14:54:41.490 回答
1

试试这个,没有任何 if/else/switch 的工作,只是好的旧数学:

int x = yourNumber;
int maxRange = 50;
while (x > maxRange) maxRange *= 2;
int range = maxRange / 4 / 5 * 5;
int begin = ((x-1) / range * range) + 1;
int end = begin + range - 1;

begin并且end是您范围的开始和结束,我认为您可以自己完成其余的工作。

于 2013-08-06T15:15:36.383 回答
0

我猜只有101以下的数字是专门的,否则它似乎符合特定的公式,一种可能的解决方案如下:

public static int[] GetRagneOf(int value) {
    var x=value>0?(value-1)/50:0;

    var power=Math.Log(x, 2);
    var count=25*(int)Math.Pow(2, power);
    var start=1+25*(int)Math.Pow(2, 1+power);

    if(value<101) {
        if(value<76) {
            if(value<51) {
                count=10;
                start=1+value-(value%10);
            }
        }
        else {
            start+=count;
        }
    }

    return Enumerable.Range(start, count).ToArray();
}
于 2013-08-06T14:52:15.913 回答
0

我想这就是你要找的Enumerable.Range

int num = 35;    
if (num <= 50)
{
    int divisor = 10;
    int quotient = num / divisor;
    var result = Enumerable.Range((quotient * divisor) + 1, divisor).ToArray();
}
else if (num <= 100 )
{
    //I assume you can expand yourself
}
于 2013-08-06T14:59:51.130 回答
0

这是我如何做的一个例子,因为从最初的问题来看,不清楚结果是否应该是一个字符串、一个数字数组或其他什么。

class Program {
    static void Main(string[] args) {
        int[] numbers = { 49, 78, 135, 245, 0, 1, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400};

        foreach(var number in numbers) {
            string result = GetRange(number);
            Console.WriteLine(string.Format("Input: {0}\tResult: {1}",number, result));
        }

        Console.ReadKey();
    }

    private static string GetRange(int number) {
        if(number <= 50) {
            return RangeByQuotient(number, 10);
        } else if(number <= 100) {
            return RangeByQuotient(number, 25);
        } else if(number <= 200) {
            return RangeByQuotient(number, 50);
        } else if(number <= 400) {
            return RangeByQuotient(number, 100);
        }

        return "Invalid Range";
    }
    private static string RangeByQuotient(int number, int quotient) {
        var lower = ((number-1) / quotient) * quotient + 1;
        var upper = (((number-1) / quotient)+1) * quotient;

        return string.Format("({0}-{1})", lower, upper);
    }
}

结果是

Input: 49       Result: (41-50)
Input: 78       Result: (76-100)
Input: 135      Result: (101-150)
Input: 245      Result: (201-300)
Input: 0        Result: (1-10)
Input: 1        Result: (1-10)
Input: 50       Result: (41-50)
Input: 51       Result: (51-75)
Input: 100      Result: (76-100)
Input: 101      Result: (101-150)
Input: 150      Result: (101-150)
Input: 151      Result: (151-200)
Input: 200      Result: (151-200)
Input: 201      Result: (201-300)
Input: 300      Result: (201-300)
Input: 301      Result: (301-400)
Input: 400      Result: (301-400)

更新: 更新以正确处理边界情况,如 50、51 等。

于 2013-08-06T15:19:20.177 回答