1. 程式人生 > >兩數求最大公約數的三種方法的C語言實現

兩數求最大公約數的三種方法的C語言實現

任意輸入兩個數,求出二者的最大公約數,以C語言實現。以下是三種方法以及對應思路:

<1>輾轉相除法。

定義兩個變數存放兩個數(a,b),先以冒泡法將較大數存放在在b內,較小數存放於a。

相除法的思路是:

1.b÷a取餘

2.判斷餘數是否為零,若為零,則最大公約數為a;不為零,則進行下一步

3.將a的值賦給b,餘數值賦給a。執行第一步。

轉換為C語言後,程式碼如下:

#include 
void main()
{
  int a,b;
  int temp;
  printf("請輸入兩個數,以空格分開:");
  scanf("%d %d",&a,&b);
  if(b

<2>相減法

定義兩變數a,b,具體思路如下:

1.先判斷a,b是否相等,若是,則直接輸出a;若否,則執行第二步。

2.判斷a是否大於b,若是,則a-b且將此式值賦給a;執行第一步;

                                若不是,則b-a且將此式值賦給b;執行第一步。

3.輸出a。

轉換為C語言後具體程式碼如下:

#include  
void main ( )  
{   
   int a, b;  
   printf("請輸入兩個數,以逗號分割:\n");  
   scanf ("%d,%d", &a, &b);                      
   while ( a!=b)   /*相減法*/
         if (a>b)  a=a-b;       
         else  b=b-a;  
   printf("最大公約數為:%d\n", a);  
     
}  


<3>窮舉法

定義變數a,b,i,具體思路如下:

1.判斷ab大小,將較小值賦給i;

2.判斷a÷i,b÷i是否都可以整除,若是,輸出i;若不是,執行第三步。

3.i--;執行第二步。

4.輸出i。

轉換為C語言後代碼如下:

#include 
int main()
{
    int a,b;
    int i;
	printf("請輸入兩個數,以逗號分隔:\n");
    scanf("%d,%d",&a,&b);
    if(a>b)      /*將a,b中的較小數賦予i*/
		i=b;
	else
		i=a;    
    while( a%i!=0 && b%i!=0 )/*窮舉法*/
    i--;
    printf("兩數的最大公約數為:%d\n",i);
	return 0;
}

以上即為使用C語言以三種演算法計算兩數最大公約數。