所以基本上我想拆分一个数字,例如:C#862
成堆栈为100(或以下为剩余部分),因此会导致:
100, 100, 100, 100, 100, 100, 100 , 100, 62
我知道这可能很容易完成,但我已经搜索过并且找不到解决方案。我不太清楚要搜索什么,这可能是问题所在。
干杯
这是简单的除法,以获得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);
这应该做的伎俩:
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[]
。
当数字大于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单线程也能做到这一点。
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用逗号附加到字符串。