这个用于查找HCF的C代码有什么问题?

时间:2014-11-30 13:20:34

标签: c code-snippets

当我刚刚在C中学习while循环时,我编写了这段时髦的代码:

#include <stdio.h>
int main(void)
{
    int dd,dr,q,r;
    printf("Enter bigger no: ");
    scanf("%d",&dd);
    printf("Enter smaller no: ");
    scanf("%d",&dr);
    while(dr>0)
    {
        r=dd%dr;
        dd=dr;
        dr=r;
    }
    printf("HCF=%d",dr);
    printf("%d\t%d\t%d\t",dd,q,r);
    return(0);
}

输入更大/更小的号码。是为了简化事情。这个程序工作正常。现在,只要我删除返回语句printf("%d\t%d\t%d\t",dd,q,r);之上的行,hcf就会变为0.是什么导致了这种奇怪的行为?

2 个答案:

答案 0 :(得分:3)

您的while循环检查dr > 0退出您的while循环dr必须为0.我认为您的HCF最后会在dd而非dr while循环。您正在使用的算法称为Euclid算法,因此您可以通过查看算法来检查它。

答案 1 :(得分:3)

打印为HCF(GCD)的内容始终为0,
因为它是dr并且循环一直运行直到dr为0.

“问题”是您在dd之后打印dr,而在它们之间没有任何空格等, 所以它看起来像一个数字。如果删除第二个printf,则只剩下dr的0 在输出之间插入\n,并切换变量以打印正确的内容。