如何解决我尝试编写一个使用函数查找 GCD 的程序为什么这段代码不起作用?
这是我到目前为止编写的代码,我找不到任何逻辑冗余。请帮忙。
#include<stdio.h>
int gcd(int,int);
void main()
{
int a,b,c;
printf("enter 2 num\n" );
scanf("%d%d",&a,&b);
printf("gcd of %d and %d is %d",a,gcd(a,b));
}
int gcd(int a,int b)
{
int i,c;
for(i=0;i<a&&i<b;i++)
{
if((a%i==0)&&(b%i==0))
c=i;
}
return c;
}
我没有得到任何输出。 输入:25,75
ps。我的第一个问题
编辑:感谢您的帮助,我犯了一个愚蠢的错误并初始化了 i=0,所以我的程序崩溃了。
解决方法
除非我的假设是错误的,否则您使用的函数是错误的。 你能指定你对函数使用哪种算法吗? 如果你愿意,你可以参考下面附上的基于欧几里得 GCD 算法的函数。
int euclid(int x,int y)
{
if (y == 0) {
return x;
} else if (x >= y && y > 0) {
return euclid(y,(x % y));
}
}
完整的程序:
#include <stdio.h>
#include <time.h>
int euclid(int,int);
int main()
{
int m,n,gcd;
clock_t start,end;
double cpu_time_used;
printf("\nEnter two numbers to find gcd using Euclidean algorithm: ");
scanf("%d%d",&m,&n);
start=clock();
gcd = euclid(m,n);
end=clock();
cpu_time_used=((double) (end-start)) / CLOCKS_PER_SEC;
if (gcd){
printf("\nThe GCD of %d and %d is %d",m,gcd);
printf("\nGCD Function took %lf Seconds to Execute\n\n",cpu_time_used);
}
else
printf("\nInvalid input\n");
return 0;
}
int euclid(int x,int y)
{
if (y == 0) {
return x;
} else if (x >= y && y > 0) {
return euclid(y,(x % y));
}
}
,
当我运行您的代码时,它崩溃了,因为您在 for 循环的第一轮进行了除以 0。您将 i 初始化为 0,然后将其与 a
和 b
一起使用以执行 %
操作。因此,如果 a
为 10,则类似于“将 10 除以 0 并得到余数”。您不能将数字除以 0,因为它是未定义的。
对方的功能也不错。这是我曾经写过的一个版本,它是迭代的而不是递归的。底部 while 循环之前开头的内容只是设置为处理负数并确保 n1 始终大于 n2。实际的算法是 while 循环。
int gcd(int numerator,int denominator) {
int remainder,temp,n1,n2;
if (numerator < 0) numerator *= -1;
if (denominator < 0) denominator *= -1;
if (numerator > denominator) {
n1 = numerator;
n2 = denominator;
}
else {
n1 = denominator;
n2 = numerator;
}
remainder = n1 % n2;
while (remainder > 0) {
n1 = n2;
n2 = remainder;
remainder = n1 % n2;
}
return n2;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。