将数字划分为已定义的堆栈

时间:2016-11-10 18:48:26

标签: c# numbers stack divide defined

所以基本上我想要分割一个数字,例如:C#中的862

成100个堆栈(或下面的剩余部分),因此会导致:

100,100,100,100,100,100,100,100,62

我知道这可能很容易做到,但我已经搜索过并且找不到解决方案。我不太清楚要搜索什么,所以可能是问题。

干杯

4 个答案:

答案 0 :(得分:4)

这是简单的除法,以获得100个堆栈的数量和模数来获得余数。

int number = 862;
int stackSize = 100;

var results = Enumerable.Repeat(stackSize, number / stackSize);
if (number % stackSize > 0)
    results = results.Concat(Enumerable.Repeat(number % stackSize, 1));

Console.WriteLine(string.Join(", ", results));

输出

  

100,100,100,100,100,100,100,100,62

或作为一个班轮(信贷给花钱)

var results = Enumerable.Repeat(stackSize, number / stackSize)
    .Concat(Enumerable.Repeat(number % stackSize, 1))
    .Where(‌​x => x > 0);

答案 1 :(得分:1)

这应该可以解决问题:

static int[] DivideIntoStacks(int number, int stacksize)
{
    int num = number;
    List<int> stacks = new List<int>();
    while (num > 0)
    {
        if (num - stacksize >= 0)
        {
            stacks.Add(stacksize);
            num -= stacksize;
        }
        else
        {
            stacks.Add(num);
            break;
        }
    }
    return stacks.ToArray();
}

对于您的示例,请使用以下代码调用该函数:DivideIntoStacks(862, 100) 这为您提供了具有所需值的int[]

答案 2 :(得分:0)

当数字大于stackSize时,向堆栈添加stackSize,并从数字中减去该数字。一旦数字小于stackSize,如果有余数,请将其添加到堆栈中:

static void Main(string[] args)
{
    int stackSize = 100;
    int num = 862;

    var stacks = new List<int>();

    while (num > stackSize)
    {
        stacks.Add(stackSize);
        num -= stackSize;
    }

    if (num > 0)
    {
        stacks.Add(num);
    }
}

我确定还有一些漂亮的LINQ单线程也能做到这一点。

答案 3 :(得分:0)

    int number = 862;
    int d = number  / 100;
    if(d == 0)
    {
        return (d).ToString();
    }

    int r = number % 100;

    string str = string.Join(",", Enumerable.Repeat("100", d));
    if(number % 100 > 0)
    str = str + ", " + r;

    return str;

示例适用于非整数。只需检查值是否小于100或d == 0(您可以通过其中任何一个进行检查),因此返回零。 得到数字的总数,并构建一个逗号分隔的字符串。 最后,如果value有一些余数,则100用逗号附加到字符串。