C#如何将数字除以相等的常数?

时间:2014-01-05 16:46:26

标签: c# algorithm numbers

假设我有一个数字,我需要分成40个数组,并保留剩余。 例如:

int Num = 140;
Wanted: 40, 40, 40, 20

int Num = 75;
Wanted: 40, 35

实现这一目标最优雅的方法是什么?

谢谢!

5 个答案:

答案 0 :(得分:2)

提示:使用模数和除法。

140 / 40 - > 3
140 % 40 - > 20

所以,你可以将数字除以40,并在数组中包含那么多40个。然后将数字mod 40附加到数组中。

伪代码:

int[] result = new int[number / 140] + 1
fill up the array with (number / 140) 40's with a for loop
set the last element to number % 140

答案 1 :(得分:1)

尝试此功能

List<int> split(int num, int splitBy)
{
    List<int> r = new List<int>();
    int v = Convert.ToInt32(num / splitBy);
    r.AddRange(Enumerable.Repeat(splitBy, v).ToArray());
    var remaining = num % splitBy;
    if (remaining != 0)
        r.Add(remaining);
    return r;
}

答案 2 :(得分:0)

使用% Operator,它会找到您的“剩余”。我会告诉你你的75个例子,但是因为这看起来很像家庭作业,所以我会留给你找出140版本。

int num = 75;

//numberOfEvens contains 1
int numberOfEvens = num / 40;
//remainder contains 35;
int remainder = num % 40;

答案 3 :(得分:0)

试试这段代码。它应该做你想要的。 但是当然要试着理解它,否则就没用了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] r1 = Split(140, 30);
            Print(r1);

            int[] r2 = Split(140, 40);
            Print(r2);

            int[] r3 = Split(75, 40);
            Print(r3);
        }

        public static void Print(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.WriteLine();
        }

        public static int[] Split(int N, int val)
        {
            List<int> lst = new List<int>();
            int M = N;
            int v = 0;
            while (M > 0)
            {
                v = M > val ? val : M;
                lst.Add(v);
                M -= v;
            }
            return lst.ToArray();
        }
    }
}

答案 4 :(得分:0)

我的extension-method使用LINQ:

public static class NumSplit
{
    public static int[] NumSplit(this int iNum, int div)
    {
        var CountInts = Enumerable.Repeat(div, iNum / div);
        var leftover = iNum % div;

        return leftover > 0 ? CountInts.Concat(new int[] { leftover }).ToArray() : CountInts.ToArray();
    }
}