[問題] 求多個數的最大公因數

看板C_and_CPP (C/C++)作者 (秋粟)時間16年前 (2009/05/17 01:34), 編輯推噓3(3011)
留言14則, 4人參與, 最新討論串1/1
我寫了一個多個數找最大公因數的程式, #include<stdio.h> #include<stdlib.h> int gcd(int a,int b){ if(a%d==0){ return b; }else{ return gcd(b,a%b); } } 這是兩個數找最大公因數的副函式, 我有試過了,因該沒有錯。 int main(){ int num[100]={0},m,n,value; printf("How many number?"); scanf("%d,&m); for(n=0;n<=m-1;n++){ printf("Input number %d",n+1); scanf("%d",&num[n]); } for(n=0;num[n+1]==true;n++){ value=gcd(num[n],num[n+1]); } printf("\n gcd=%d \n",value); system("pause"); } 我用dev c++ complie時過了, 可是執行時, 前面輸出測試幾個數,和數字一一輸入都沒問題, 出來的GCD卻不是正確的。 所以想在此請大大們為小弟指點一下迷津, 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.77.79.134 ※ 編輯: mikle0915 來自: 203.77.79.134 (05/17 01:37)

05/17 01:45, , 1F
if(a%d==0){ 這筆誤嗎?
05/17 01:45, 1F

05/17 01:55, , 2F
num[n+1]==true這個寫法頗不直覺, 建議直接用!=0就好.
05/17 01:55, 2F

05/17 01:57, , 3F
多個數的gcd G:G=gcd(#0,#1), G=gcd(G,#2), G=gcd(G,#3)
05/17 01:57, 3F

05/17 01:58, , 4F
你的程式只是把value一直算#n與#n+1的gcd, 所以你的演算
05/17 01:58, 4F

05/17 01:58, , 5F
== true 在true被定義為常數的環境下可能會有不同的結果
05/17 01:58, 5F

05/17 01:58, , 6F
法並沒有match算多個數的gcd的邏輯:) 當然其實有更有效
05/17 01:58, 6F

05/17 01:59, , 7F
率的算法, 比如(#0,#1), (#2,#3),...分開求gcd再求所有
05/17 01:59, 7F

05/17 02:00, , 8F
gcd的gcd(好饒舌), 總之重新思考一遍算法吧:)
05/17 02:00, 8F

05/17 08:17, , 9F
V大不好意思,我還是點不太懂,所以說是不能先求兩個數
05/17 08:17, 9F

05/17 08:18, , 10F
的gcd再將所得的gcd之值和下一個數求gcd,陣列空了沒有
05/17 08:18, 10F

05/17 08:19, , 11F
值。 這樣會錯對不對,謝謝。
05/17 08:19, 11F

05/17 08:21, , 12F
你的寫法應該只有n和n+1的gcd吧! value沒有和下一個求gcd
05/17 08:21, 12F

05/17 08:21, , 13F
陣列空了沒有值就停下來,也表示做完所有數的gcd。
05/17 08:21, 13F

05/17 08:22, , 14F
嗯,我大概知道了,謝謝d大。
05/17 08:22, 14F
文章代碼(AID): #1A3langk (C_and_CPP)
文章代碼(AID): #1A3langk (C_and_CPP)