最大公因數(Greatest Common Divisor,簡寫為G.C.D.;或Highest Common Factor,簡寫為H.C.F.),指某幾個整數共有因數中最大的一個。參考來源:最大公因數 - 維基百科 、展轉相除法 - 維基百科
兩個整數的最大公因數主要有三種尋找方法:
//
//還沒加入檢查輸入不可為float(浮點數)
//
#include <stdio.h>
#include <stdlib.h>
#define INT int
#define UINT unsigned int
#define STATUS
#define SUCCESS 0
#define ERROR_PARSE 1
#define ERROR_BUFFER 2
#define DEVISOR_FIRST_VALUE 1
//求出兩傳入值的最大公因數。
STATUS UINT
CaculateGcd(INT InputVariableA,INT InputVariableB,UINT *Result);
//
//輸入兩數,求最大公因數
//
int main(int argc, char *argv[]){
INT InputVariableA;
INT InputVariableB;
UINT Result;
UINT Status;
InputVariableA = NULL;
InputVariableB = NULL;
Status = NULL;
Result = DEVISOR_FIRST_VALUE;
//等待按鍵輸入
scanf("%d %d", &InputVariableA, &InputVariableB);
printf("您輸入的數字為%d, %d\n", InputVariableA, InputVariableB);
//呼叫副程式,求最大公因數,然後判斷Status。
Status = CaculateGcd(InputVariableA, InputVariableB, &Result);
switch(Status){
case(SUCCESS):
printf("%d與 %d的最大公因數為:%d\n", InputVariableA, InputVariableB, Result);
break;
case(ERROR_PARSE):
printf("Error No. = %d,傳入值錯誤\n", ERROR_PARSE);
break;
case(ERROR_BUFFER):
printf("Error No. = %d,Buffer錯誤\n", ERROR_BUFFER);
break;
}
system("PAUSE");
return 0;
}
//求出兩傳入值的最大公因數。
STATUS UINT
CaculateGcd(INT InputVariableA, INT InputVariableB, UINT *Result){
UINT Bigger;
UINT Smaller;
UINT Buffer;
//檢查傳入值
if(InputVariableA == NULL || InputVariableB == NULL || InputVariableA < 1 || InputVariableB < 1){
return ERROR_PARSE;//不接受的傳入值
}
if(*Result != DEVISOR_FIRST_VALUE){
return ERROR_BUFFER;//Buffer錯誤
}
//(1)檢查兩數是否相等。
if(InputVariableA == InputVariableB){
*Result = InputVariableA;
return SUCCESS;
}
//(2)檢查兩數之中,何為大數,何為小數。
if(InputVariableA > InputVariableB){
Bigger = InputVariableA;
Smaller = InputVariableB;
} else{
Bigger = InputVariableB;
Smaller = InputVariableA;
}
//(3)輾轉相除法
do{
Buffer = Bigger % Smaller;
if(Buffer == 0){
*Result = Smaller;
} else {
Bigger = Smaller;
Smaller = Buffer;
}
} while(Buffer != 0);
return SUCCESS;
}
沒有留言:
張貼留言