[問題]最大公因數

看板C_and_CPP作者 (大ㄟ)時間14年前 (2010/02/03 22:16), 編輯推噓12(12016)
留言28則, 7人參與, 最新討論串1/5 (看更多)
#include<stdio.h> #include<stdlib.h> main() { int a,b,q,r,t; printf("請給我兩個正整數:"); scanf("%d %d",&a,&b); if(a<=0||b<=0) {printf("請重新輸入~~~");} if(a<b)/*if a<b,then swap a and b,so a>b*/ {t=b;b=a;a=t;} while(a>=b) { if(a%b==0) { printf("%d",b); break; } else { a=b*q+r; r=b;b=a; } } printf("gcd(%d,%d)=%d",a,b,r); <------感覺這變數r列印出來有點不對勁 system("PAUSE"); 可是想不出有其他辦法 return 0; } 希望大家可以幫我解惑一下錯誤在哪裡,感覺自己快被榨乾了..... 我用的是Dev-c++ 執行出來的結果(可以執行)但答案都錯誤 = =" 謝謝大家 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.114.73 ※ 編輯: kin30503 來自: 218.172.114.73 (02/03 22:17)

02/03 22:46, , 1F
你的 a,b 已經不是原來的 a,b 了....
02/03 22:46, 1F

02/03 22:50, , 2F
而且答案給r, 肯定會有錯誤的case....
02/03 22:50, 2F

02/03 23:01, , 3F
變數沒有初始化~~
02/03 23:01, 3F

02/03 23:01, , 4F
那怎麼樣改變這變數?
02/03 23:01, 4F

02/03 23:04, , 5F
去爬文覺得不想用那種寫法= =" 但是這個變數我想不太出
02/03 23:04, 5F

02/03 23:04, , 6F
int a=0,b=0,q=0,r=0,t=0;然後跑一遍覺得這程式不對
02/03 23:04, 6F

02/03 23:04, , 7F
q跟r一開始的值是亂的
02/03 23:04, 7F

02/03 23:06, , 8F
r需要init, 不過我也不是很懂else裡在幹麻....~_~
02/03 23:06, 8F

02/03 23:06, , 9F
還沒注意到原來還有個q喔.....orz
02/03 23:06, 9F

02/03 23:06, , 10F
個人覺得還是板上爬爬文比較快...orz
02/03 23:06, 10F

02/03 23:07, , 11F
冏 想了一遍這樣寫會出很多錯 只能用以前那樣寫嗎
02/03 23:07, 11F

02/03 23:11, , 12F
以前那樣?? 最大公因數不是用 輾轉相除法 就可以求了?
02/03 23:11, 12F

02/03 23:12, , 13F
不知道為什麼,感覺這好像不像求最大公因數耶XD
02/03 23:12, 13F

02/03 23:13, , 14F
是想到輾轉相除,不過過程會出問題,我爬文慢慢懂好了XD
02/03 23:13, 14F

02/03 23:14, , 15F
同一樓上的看法 q一直沒給值啊 就算有值a也是越來越大
02/03 23:14, 15F

02/03 23:16, , 16F
原PO要不要說一下原來的想法呢?
02/03 23:16, 16F

02/03 23:17, , 17F
阿,剛剛看出這程式大概是想要怎麼運作,這想法沒錯
02/03 23:17, 17F

02/03 23:17, , 18F
繼續來修改修改看能不能改出來~~~
02/03 23:17, 18F

02/03 23:18, , 19F
我想說隨便給兩個數,大的當a小的當b 沒有的話就對調
02/03 23:18, 19F

02/03 23:18, , 20F
最主要是while裡面的q和r這一段求最大公因數的部分
02/03 23:18, 20F

02/03 23:19, , 21F
然後mod掉b後是0就直接列印,沒有就進回圈一直跑
02/03 23:19, 21F

02/03 23:19, , 22F
嗯嗯 那段我想一想會有問題 不過就不太知道怎麼改= ="
02/03 23:19, 22F

02/03 23:23, , 23F
r=a%b; a=b; b=r;
02/03 23:23, 23F

02/03 23:24, , 24F
哈,c大解出來了,把else裡面換成那行就ok了
02/03 23:24, 24F

02/03 23:26, , 25F
為什麼我執行電腦說exe發生問題要我關閉阿0.0
02/03 23:26, 25F

02/03 23:26, , 26F
要把else原本的都拿掉放那一行進去
02/03 23:26, 26F

02/03 23:28, , 27F
然後如果a是b的倍數,答案會錯誤耶@@
02/03 23:28, 27F

02/03 23:39, , 28F
痾 我把原本r那行取代掉 電腦會叫我結束程式...
02/03 23:39, 28F
文章代碼(AID): #1BQOKqbm (C_and_CPP)
文章代碼(AID): #1BQOKqbm (C_and_CPP)