0

我正在尝试编写一个程序,让用户输入两个正整数。然后使用带除法的欧几里得算法计算两个数的最大公约数和最小公倍数。允许用户一遍又一遍地重复这个

这是我到目前为止的代码。我得到一个无限循环,但我不知道为什么。请帮忙

int main(int argc, char** argv) {

   int posint1, posint2, remainder, Lcm, divisor, dividend;
   int num = 0;

   while(num != -1)
   {
    printf("Enter a positive number to begin Euclidean algorithm ( enter -1 to stop): ");
    scanf("%C", & num );
    if (num != -1)
    {  
printf("Enter the first positive integer ");
scanf("%d", & posint1);
printf("Enter the second positive integer ");
scanf("%d", & posint2);


if (posint1 > posint2)
{
    divisor = posint2;
    dividend = posint1;

    while(posint1 != 0);
    {
        remainder = dividend % divisor;
        dividend = divisor;
        divisor = remainder;         
    }
   printf("The Greatest Common Divisor is %d \n", dividend);
     Lcm = (posint1 * posint2) / dividend;
     printf("The Least Common Multiple is %d \n", Lcm);    
 }

else 

{
 divisor = posint1;
 dividend = posint2;

 while(posint2 != 0);
    {
     remainder = dividend % divisor;
     dividend = divisor;
     divisor = remainder;
    }
 printf("The Greatest Common Divisor is %d \n", dividend);
     Lcm = (posint2 * posint1) / dividend;
     printf("The Least Common Multiple is %d \n", Lcm);  
 }
 }
 }


return (EXIT_SUCCESS);
}
4

1 回答 1

1

posint1posint1在这个循环中永远不会改变,如果!= 0它将永远循环

while(posint1 != 0); // <-- remove this semi colon too.
{
    remainder = dividend % divisor;
    dividend = divisor;
    divisor = remainder;         
}

同样的:

 while(posint2 != 0); // <-- ;
    {
     remainder = dividend % divisor;
     dividend = divisor;
     divisor = remainder;
    }
于 2013-10-09T03:32:34.723 回答