将数字除以定义的堆栈

问题描述 投票:1回答:4

所以基本上我想拆分一个数字,例如:C#862

成堆栈为100(或以下为剩余部分),因此会导致:

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

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

干杯

c# numbers stack divide defined
4个回答
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
投票

这应该做的伎俩:

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[]


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单线程也能做到这一点。


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(您可以通过任何这些检查),所以返回零。得到数字的总数,并构建一个逗号分隔的字符串。最后,如果值有一些余数,则100用逗号附加到字符串。

© www.soinside.com 2019 - 2024. All rights reserved.