我正在嘗試計算數學組合。我使用的公式是N!/K! (N-K)!
。做組合時除零發生
我能夠從N=10
得到正確的答案(10
)與N=5
,K=2
和120
,K=3
。
但是,當我試圖用更大的數字測試像N=50
,K=5.
零除錯誤的整數除以彈出。
我試圖用long int
來定義finalAns
,但它不起作用。有任何想法嗎?
int N;
int init;
int K;
int factN = 1;
int factK = 1;
double finalAns;
cout << "Input of N = ";
cin >> N;
cout << "Input of K = ";
cin >> K;
int subs = N - K;
int factsubs = 1;
for (init = 1; init <= N; init++)
{
factN = factN * init;
}
for (init = 1; init <= K; init++)
{
factK = factK * init;
}
cout << "K is " << factK << endl;
for (init = 1; init <= subs; init++)
{
factsubs = factsubs * init;
}
finalAns = factN/(factK * factsubs);
cout << N << "C" << K << " is " << finalAns << endl;
整數溢出?您是否嘗試過使用例如'long'?或「長久」?或者'unsigned variants'?請學習如何使用調試器,並逐行檢查代碼,以查看發生了什麼,同時監視變量及其值。 –
此外,由於您所做的分割是一個整數除法,因此將其分配給浮點變量無關緊要,您無論如何都不會得到任何小數。 –
在這種情況下'subs'正被設置爲'45'。 'factsubs'是1.當你試圖在一個循環中用'init'乘以最終增加到'45'會導致'factsubs'的整數溢出時,它的值將變爲負數,最終在一些乘法之後它被設置爲' 0'。現在'init * 0 = 0'。你可以使用'long long'作爲'finalAnswer'和'factsubs'來處理它。記住它是否有效,問題會以更高的值重新生成。 – Awais