如何从递增的整数

时间:2017-05-21 19:45:12

标签: c# math

我需要一个函数,它将输入数字输入到int.Max并给我一个0到12之间的数字 - 所以1,2,3,4,5,6,7,8,9,10,11是有效数字。

我考虑过以下方式做,但我认为必须有更好的方法吗?

private static int GetNumberBetweenZeroAndTweleve(int inputNumber)
{
    int result = 1;
    for (int i = 1; i < inputNumber; i++)
    {
        // something elegant to calculate a number
        result++;
        if (result == 12)
            result = 1;
    }

    return result;
}

示例输入=&gt;输出:

1 => 1
2 => 2
3 => 3
4 => 4
5 => 5
6 => 6
7 => 7
8 => 8
9 => 9
10 => 10
11 => 11
12 => 1
13 => 2
14 => 3

2 个答案:

答案 0 :(得分:3)

你不想要任何循环(如果大inputNumber,可能昂贵int.MaxValue是{{1但是

2147483647

测试:

 private static int GetNumberBetweenZeroAndTweleve(int inputNumber) {
   return inputNumber <= 0
     ? 1
     : (inputNumber - 1) % 11 + 1;
 }

结果:

var report = string.Join(Environment.NewLine, Enumerable
  .Range(1, 14)
  .Select(n => $"{n,2} => {GetNumberBetweenZeroAndTweleve(n),2}"));

Console.Write(report);

答案 1 :(得分:0)

我根据你的例子编辑了我的答案:

vk::Result createWin32SurfaceKHR(vk::Win32SurfaceCreateInfoKHR*, vk::AllocationCallbacks*, vk::SurfaceKHR*)

没有if-else快捷方式:

private static int GetNumberBetweenZeroAndTweleve(int inputNumber)
{
    return inputNumber < 12 ? Math.Max(inputNumber, 1) : inputNumber % 12 + 1;
}