找回密碼
 註冊

C語言請益

来源: 新聞 blackly 2011-9-2 15:04 只看這個作者 |閱讀模式
5 4901
本文最後由 編輯部女孩 於 2016-9-12 13:48 編輯

小的最近在摸索C語言的書
看到題庫內有一題是 用函數求最大公因數
想請問板上各位大大 這題如果用C語言要怎麼寫出來
收藏
收藏0

網友回覆5

跳到指定樓層
2#
ng01 2011-9-2 16:10 只看這個作者
可以使用"輾轉相除法"的模式寫出來

這是我目前想到的方法

不過這個算法好像也有其他名稱,我不確定大大有沒有聽過XD
本文最後由 編輯部女孩 於 2016-9-12 13:48 編輯

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a,b,r,M,N,m;
printf("請輸入 2 個正整數 \n==> ");
scanf("%d %d",&a,&b);
M=a;
N=b;
while ( b != 0 )
{
r = a % b;
a = b;
b = r;
}
printf(" 最大公因數 %d\n ",a);
system("pause");
}
轉貼的
本文最後由 編輯部女孩 於 2016-9-12 13:49 編輯

輾轉相除法確實是快速有效的方法
如果不會寫輾轉相除的話可以先比大小
用for回 圈把1~min之間所有的數字都除一次並找出可整除的最大值就是了
本文最後由 編輯部女孩 於 2016-9-12 13:49 編輯

你說的函式應該是說要用call function的方式吧!
#include <stdio.h>
#include <stdlib.h>
int GCD (int, int);
int main(void)
{
int a, b;
printf("請輸入 2 個正整數 \n");
scanf("%d %d",&a,&b);
printf("最大公因數 %d\n",GCD(a, b));
system("pause");
return 0;
}
int GCD (int x, int y)
{
int temp, r;
if(x < y)
{
  temp = x;
  x = y;
  y = temp;
}
while(y != 0)
{
  r = x % y;
  x = y;
  y = r;
}
return x;
}
我修改了3樓的大大的程式用call function的方式寫了
自己用C++跑過應該對

回覆 1# blackly 的文章

本文最後由 編輯部女孩 於 2016-9-12 13:49 編輯

最大公因數 好懷念 以前第一次小考的題目....
以後會運用在 表現分數的時候
(上次運用到是在 寫一個高斯消去法..如果有答案 且是分數時 用最簡分數表示...)