注册 登录
编程论坛 C语言论坛

求公约数

qiqicai 发布于 2021-04-06 22:01, 1309 次点击
#include <stdio.h>
 
int main()
{
    int n1, n2, i, gcd;
 
    printf("输入两个正整数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)         
    {                                            
        // 判断 i 是否为最大公约数
        if(n1%i==0 && n2%i==0)                这块不用取i的最大值吗  如果n1=4 n2=8  那i要是为2 那就能满足 (n1%i==0 && n2%i==0) 但是i并不是最大公约数  
            gcd = i;                           那这块不是有问题吗  为什么程序能正常运行
    }
 
    printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
 
    return 0;
}
2 回复
#2
蔚然与成风2021-04-06 22:27
r=2,gcd=2,但是for循环并没有结束,还是 i <= n1 && i <= n2,一直到i=4时,++i,此时i=5,不满足i <= n1 && i <= n2 跳出循环;
#3
rjsp2021-04-07 08:32
算法也需要改进

程序代码:
#include <stdio.h>

unsigned gcd( unsigned a, unsigned b )
{
    for( ; b!=0; )
    {
        unsigned t = a;
        a = b;
        b = t%b;
    }
    return a;
}

int main( void )
{
    unsigned a, b;
    printf( "%s", "输入两个正整数,以空白字符分隔: " );
    scanf( "%u%u", &a, &b );
    printf( "%u 和 %u 的最大公约数是 %u\n", a, b, gcd(a,b) );
}
1