[問題] 不知哪寫錯了@ @||| 巴斯卡三角形

看板C_and_CPP作者 (讓我上吧~~~~)時間14年前 (2011/03/07 15:28), 編輯推噓0(0019)
留言19則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev cpp 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 基本的巴斯卡三角形輸出 餵入的資料(Input): n,由scanf輸入 預期的正確結果(Expected Output): 輸出巴斯卡三角形 錯誤結果(Wrong Output): 一旦n超過10 就會產生如下圖的結果 http://0rz.tw/ETxB5 單獨測試階乘跟組合 結果都正確 但不知為何輸出三角形就爆炸了= =||||| 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> long fact(int n) //n階乘 { long factor[n]; factor[0]=1; int i; for(i=1;i<n;i++) factor[i]=i*factor[i-1]; return factor[n-1]; } long combine(n,r) //組合 { long cnr=fact(n+1)/(fact(r+1)*fact(n-r+1)); return cnr; } void paint(int n) //排版 { int i,j; for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { if(combine(i,j)==0) printf(""); else printf("%5ld",combine(i,j)); } printf("\n"); } } int main() //輸出 { int n; printf("input n\n"); scanf("%d",&n); paint(n); return 0; } 補充說明(Supplement): 想請問是我自己程式裡面有沒注意到的地方(ex:int long的長度) 還是os有問題??(因為灌新的東西有時會發生記憶體錯誤= =|||) 感謝版上熱心大大們的解答m(__)_m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.0.166 ※ 編輯: peropero1 來自: 59.126.0.166 (03/07 15:29)

03/07 15:42, , 1F
請修改標題
03/07 15:42, 1F

03/07 15:43, , 2F
醬可以嗎???
03/07 15:43, 2F

03/07 15:44, , 3F
可以阿 讓人家看標題知道您想問什麼就可以了
03/07 15:44, 3F

03/07 15:50, , 4F
超出LONG最大值了吧,要改進程式碼
03/07 15:50, 4F

03/07 15:57, , 5F
10!沒有超出吧 另外寫printf可以輸出說
03/07 15:57, 5F

03/07 16:06, , 6F
long factor[n]; <-- VLA..?
03/07 16:06, 6F
※ 編輯: peropero1 來自: 59.126.0.166 (03/07 16:21)

03/07 16:21, , 7F
long sum=1; for(i=1; i<=n ; i++) sum *= i;
03/07 16:21, 7F

03/07 16:31, , 8F
用變數輕鬆搞定 不過為什麼陣列就會爆炸= =a???
03/07 16:31, 8F

03/07 16:33, , 9F
系統預設是factor[n]的n最大是9吧
03/07 16:33, 9F

03/07 16:46, , 10F
n=9 也是error 我想是他fact裡面會有負號是最大的問題吧
03/07 16:46, 10F

03/07 16:52, , 11F
我試了一下 combine(0,9) 就炸了
03/07 16:52, 11F

03/07 19:33, , 12F
有負號嗎?? factor[0]=1, i從1開始, 哪邊有負號?????
03/07 19:33, 12F

03/07 19:43, , 13F
n似乎有可能出現負號
03/07 19:43, 13F

03/07 19:46, , 14F
把j<=n改成j<=i可能就ok了
03/07 19:46, 14F

03/07 23:19, , 15F
combine(0,9) 呼叫fact(n-r+1) 會變fact(-8)
03/07 23:19, 15F

03/07 23:20, , 16F
然後 long factor[n]; 就炸了
03/07 23:20, 16F

03/08 13:21, , 17F
combine的參數n是paint的i而不是輸入值n所以n-r+1可能是負的
03/08 13:21, 17F

03/14 19:08, , 18F
括號....
03/14 19:08, 18F

03/14 19:10, , 19F
會使你溢位 fact(n+1)/(fact(r+1)*fact(n-r+1))
03/14 19:10, 19F
文章代碼(AID): #1DT8aGGX (C_and_CPP)