【问题标题】:Will %= get the module of a collection?%= 会得到一个集合的模块吗?
【发布时间】:2018-12-29 06:52:29
【问题描述】:

这是我目前获得的要传递给 Mod 方法的集合的模数。

public static void Mod(int[] nums)
{
    int total = 0;
    foreach (int num in nums)
    {
        if (total == 0)
        {
            total = num;
        }
        else
        {
            total %= num;
        }
    }
    Console.WriteLine("Mod: " + total);
}

我想知道这是找到这个的正确方法还是我会得到完全错误的答案。

【问题讨论】:

  • 您是否使用此代码得到正确答案?你能分享一些示例输入和预期输出吗?
  • “集合的模数”是指“集合总和的模数”吗?我不确定你希望得到什么结果。
  • 什么是“集合的模数”?模数是除法后的余数(例如,11%3 是 2(11/3*3 是 9,11-9 是 2)。我从未见过它与一对以上的数字一起使用。现在,我'从来没有使用 %= 运算符 (docs.microsoft.com/en-us/dotnet/csharp/language-reference/…) 的冲动;这对我来说似乎有些奇怪。你正在做的是遍历一个集合 - 天哪,我什至无法描述你的代码的作用。做你有一个你想要结束的定义吗?
  • 我在实际测试之前问过这个问题,那是我的错。我得到了我所期望的谢谢你的时间。

标签: c#


【解决方案1】:

好吧,回答你的问题;是的,你会得到正确的结果;只要您期望结果是余数的余数,以此类推数组的长度。在这方面,我同意flydog57's的评论:

现在,我从未有过使用%= operator 的冲动;这对我来说似乎很奇怪。

我们都知道x %= yx = x % y是一样的;正是在这个确切的用例中,我们可以使用%= 来简化代码。如果你被要求执行顺序模数(得到 90 / 72 的余数,然后得到余数的余数),那么你的解决方案是正确的。但是,如果您的问题不是顺序模数,请更新您的问题以澄清。

另一方面,您的代码可以简化和改进:

public static int Mod(int[] nums) {
    int result = nums[0];
    for (int i = 1; i < nums.Length; i++) {
        // Division of zero is zero, and division by zero is only allowed with doubles.
        if (result == 0 || nums[i] == 0)
            return 0;

        result %= nums[i];
    }

    return result;
}

public static void Main(string[] args) {
    int[] nums = new int[] { 300, 205, 90, 72, 15, 6 };
    Console.WriteLine($"Result: {Mod(nums)}");
    Console.ReadKey();
}

上面的代码将产生5,因此请使用您需要的值进行数学运算,看看答案是否符合您的预期。如果没有,请用您的价值观和预期答案更新您的问题。

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 2023-03-18
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多