[問題] 計算 (x+1)^n 的問題

看板C_and_CPP作者 (峰)時間14年前 (2009/12/05 22:04), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 我希望能做個程式跑出 (x+1)^n 的各項係數, 但是當我輸入的 n 值從13開始以後就會出錯。 希望得到的正確結果:能夠順利跑出各項係數 程式跑出來的錯誤結果:n值從13開始出錯 開發平台: Dev-C++ 有問題的code: #include <stdio.h> #include <stdlib.h> void binary(int); int C(int,int); int main(int argc, char *argv[]) { int n; printf("求二項式 (x+1)^n 的係數\n"); start: printf("請輸入 n = "); scanf(" %d",&n); if(n==-1) { putchar('\n'); goto end; } else { printf("(x+1)^%d 的二項式係數是 :\n",n); binary(n); putchar('\n'); goto start; } end: system("PAUSE"); return 0; } void binary(int n) { int i,q,r; q=n; r=n; for(i=0;i<=n;i++) { printf("係數%d : %d\n",i,C(q,r)); r=r-1; } } int C(int m,int n) { int p=m-n,sum_1=1,sum_2=1,sum_3=1,ans; for(m=m;m>0;m--) { sum_1=sum_1*m; } for(p=p;p>0;p--) { sum_2=sum_2*p; } for(n=n;n>0;n--) { sum_3=sum_3*n; } ans=(sum_1)/(sum_2*sum_3); return ans; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.222.65

12/05 22:05, , 1F
爆掉了
12/05 22:05, 1F

12/05 22:34, , 2F
13! > 2^31 int溢位
12/05 22:34, 2F

12/05 22:43, , 3F
不就巴斯卡三角形 就DP做很簡單
12/05 22:43, 3F

12/06 16:21, , 4F
int型態的變數最大只能到2的31次方減一
12/06 16:21, 4F

12/06 16:24, , 5F
若在計算過程中超過此限制,就無法預測接下來會發生什麼事了
12/06 16:24, 5F
文章代碼(AID): #1B6cXllL (C_and_CPP)
文章代碼(AID): #1B6cXllL (C_and_CPP)