“两个整数的最大公约数是将两个数字中的每一个均分的最大整数。编写返回两个整数的最大公约数的方法 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
。使用无符号类型,因为该技术不适用于有符号值。如果您知道您的a
和b
值不是负值,则可以改用long
或int
。
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);
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(77条)