C语言最大公约数算法:C# 求最大公约数(common factor finder)

“两个整数的最大公约数是将两个数字中的每一个均分的最大整数。编写返回两个整数的最大公约数的方法 Gcd。将该方法合并到从用户读取两个值并显示结果的应用程序中。”

(这不是作业,只是我正在使用的书中的练习)

你能帮我解决这个问题吗?这是我到目前为止得到的。

(编辑-我可以提交两个数字,但它不会为我计算 Gcd)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Greatest_Common_Divisor
{
cl Program
{
    static int GetNum(string text)
    {
        bool IsItANumber = false;
        int x = 0;
        Console.WriteLine(text);
        do
        {
            IsItANumber = int.TryP(Console.ReadLine(), out x);
        } while (!IsItANumber);
        return x;
    }
    static void Main(string[] args)
    {
        string text = "enter a number";
        int x = GetNum(text);
        text = "enter a second number";
        int y = GetNum(text);
        int z = (x, y);
        Console.WriteLine(z);
    }
    private static int (int x, int y)
    {
        int v = 0;
        int n = 0;
        v = GetGreatestDivisor(x, y);
        return v;
    }
    static int GetGreatestDivisor(int m, int h)
        {
            do
            {
                for (int i = m; i <= 1; i--)
                    if (m%i == 0 && h%i == 0)
                    {
                        int x = 0;
                        x = i;
                        return x;
                    }
            } while (true);
            return m;
        }
  }
}
90

下面是Euclidean algorithm的实现,它返回最大公约数,而不执行任何堆分配。

如果需要,可以用ulong替换uint。使用无符号类型,因为该技术不适用于有符号值。如果您知道您的ab值不是负值,则可以改用longint

private static ulong (ulong a, ulong b)
{
    while (a != 0 && b != 0)
    {
        if (a > b)
            a %= b;
        else
            b %= a;
    }
    return a | b;
}

此方法在我的metadata-extractor库中使用,它在其中关联了unit tests

27

使用 LINQ 的聚合方法:

static int (int[] numbers)
{
    return numbers.Aggregate();
}
static int (int a, int b)
{
    return b == 0 ? a : (b, a % b);
}

注意:上面的答案是从Greatest Common Divisor from a set of more than 2 integers的接受答案借来的。

10

您可以尝试使用this

static int GreatestCommonDivisor(int[] numbers)
{
    return numbers.Aggregate();
}
static int GreatestCommonDivisor(int x, int y)
{
return y == 0 ? x : GreatestCommonDivisor(y, x % y);
}
6

试试这个:

public static int (int p, int q)
{
    if(q == 0)
    {
         return p;
    }
    int r = p % q;
    return (q, r);
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(884)
Net disk:用于.NET的可编程RAM磁盘 API
上一篇
低代码发展前景:Greasemonkey提示前景
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(77条)