所以基本上我想要分割一个数字,例如:C#中的862
成100个堆栈(或下面的剩余部分),因此会导致:
100,100,100,100,100,100,100,100,62
我知道这可能很容易做到,但我已经搜索过并且找不到解决方案。我不太清楚要搜索什么,所以可能是问题。
干杯
答案 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用逗号附加到字符串。