2016-11-10 9 views
-1

Поэтому в основном я хочу, чтобы разделить номер, например: 862 в C#Разделить число в определенные стеки

в штабелях 100 (или ниже с остатком), так что это приведет:

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

Я знаю, что это, вероятно, легко сделать, но я искал и не смог найти решение. Я не совсем знаю, что искать, чтобы это могло быть проблемой.

Приветствия

+3

'Enumerable.Repeat (100, num/100) .Concat (new [] {num% 100}). Где (x => x> 0) .ToArray()' – spender

ответ

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); 
    } 
} 

Я уверен, что есть некоторые Spiffy LINQ один вкладыш, чтобы сделать это, как хорошо.

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[] с требуемыми значениями.

3

Это простое подразделение, чтобы получить количество 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

Или как один вкладыш (кредит на spendor)

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

Мне скорее понравилось мое решение, но я должен признать, что это очень приятно. – Sam07

+0

Работает блестяще – Nornitus

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 добавлением к строке с запятой.

 Смежные вопросы

  • Нет связанных вопросов^_^