C#返回一个数字和剩余部分的数字的倍数?

时间:2013-08-09 13:01:32

标签: c#

我想找到给定一定数量的所有3的倍数,并找到余数。

例如:

给定数字10:3的倍数= {3; 6; 9} +余数= 1

给定数字11:3的倍数= {3; 6; 9} +余数= 2

到目前为止我的算法(但不是代码)是这样的:

  1. 检查X是否为3的倍数 - 是 - 返回倍数(无余数);
  2. 否?是x-1是3的倍数 - 是 - 返回倍数(1个余数);
  3. 否?是x-2是3的倍数 - 是 - 返回多个(剩余2个);
  4. 使用更少的代码有更好的方法吗?

    编辑:还有2件事,我只想找3 - 所以这可能是一个常数。还有任何小于3:2,1和0的数字 - 我不介意为此提供额外的逻辑。

10 个答案:

答案 0 :(得分:13)

IEnumerable<int> Foo(int n, int k)
{
  int m = k;
  while (m <= n)
  {
    yield return m;
    m += k;
  }

  yield return m - n;
}

答案 1 :(得分:12)

Integer division/)和modulus%)是您的朋友:

var multiples = num / 3;
var remainder = num % 3;

答案 2 :(得分:4)

x =给定数字
y =循环数

y从0到x循环,每次增加3 如果y> x然后remender是(x-(y-3))

答案 3 :(得分:1)

答案 4 :(得分:1)

int number = 10;
int divisor = 3;

List<int> numbers;

// Find all the numbers by incrementing i by the divisor.
for(int i = 0; i < number; i += divisor)
{
    numbers.Add(i);
}

// Find the remainder using modulus operator.
int remainder = number % divisor;

答案 5 :(得分:1)

这是您的确切输出

private static void Main(string[] args)
    {
        int num = 10;
        int divisor = 3;

        if(num<divisor)
            Console.Write(num + " is less than " + divisor);

        Console.Write("Given the number " + num + " : multiples of " + divisor + " = {");

        for (int i = divisor; i < num; i+=divisor)
            Console.Write((i!=3) ? ";"+i : i.ToString());

        Console.Write("} + remainder = " + num%divisor);

    }

<强>输出

Given the number 10 : multiples of 3 = {3;6;9} + remainder = 1

并检查输入是否小于除数

答案 6 :(得分:1)

您只需枚举输出值

即可
  public static IEnumerable<int> GetMultiples(int value, int divisor) {
    // Be care of negative and zero values...
    if ((value <= 0) || (divisor <= 0))
      yield break;

    // Multiplications
    for (int i = 1; i <= value / divisor; ++i)
      yield return i * divisor;

    // Finally, let's return remainder if it's non-zero
    if ((value % divisor) != 0)
      yield return value % divisor;
  }

  ...

  foreach(int item in GetMultiples(10, 3)) { // item will be 3, 6, 9, 1
    ...
  }

答案 7 :(得分:0)

您可以使用operator modulo

%

但如果你经常使用很慢......

答案 8 :(得分:0)

这将为您提供所需的输出:

            int num;
            Console.WriteLine("give me a number equal or above 3!");
            int.TryParse(Console.ReadLine(),out num);
            int i = 0;
            List<int> nums = new List<int>();
            i += 3;
            while (i <= num)
            {
                nums.Add(i);
                i += 3;
            }

            Console.Write("Numbers are: ");
            foreach (int y in nums)
            {
                Console.Write(y + " , ");
            }
            Console.WriteLine("The remainder is " + (num - nums[nums.Count - 1]));

答案 9 :(得分:0)

不是LINQ专门为此而构建的吗?

IEnumerable<int> GetMultiples(int max)
{
    return Enumerable.Range(1, max / 3)
                     .Select(p => p * 3)
                     .Concat((max %= 3) == 0 ? new int[0] : new int[] { max });
}