[英]C++ factorial program give infinity for any number greater than 2
所以現在是凌晨5:00,我感到困惑和沮喪。 我之前已經創建了這樣的程序,但是不知道發生了什么。
我創建了一個非常簡單的階乘程序,並仔細檢查了邏輯,但是每次我輸入大於2的數字時,程序都會進入循環,不斷打印出“ inf”。 我看不到程序本身有什么問題。 :(
#include <iostream>
using namespace std;
int main() {
double userNumber = 0;
double i = 1;
cout << "This program will calculate the factorial of the number you enter.\nPlease enter your number now: ";
cin >> userNumber;
for ( i = 1; i < userNumber; i++ ) {
userNumber *= i;
cout << userNumber;
}
cout << "\n\nThe factorial is " << userNumber << "." << endl;
return 0;
}
它適用於1和2:
但是只要您做3或更多...
我已經有一段時間沒有創建C ++程序了,但是我一生都看不出有什么問題。 這僅僅是一個非常明顯的語法錯誤,還是我的計算機最終崩潰了?
編輯:我只是將數字從雙精度更改為整數,這就是我得到的:
我仍然不明白為什么要這么做。 我看不到for循環或其他任何問題...
哎呀。 撞到桌子上
更改
for ( i = 1; i < userNumber; i++ ) {
至
for ( i = userNumber - 1; i > 1; --i ) {
請注意,您的代碼更改了循環主體中的userNumber
,因此,僅當userNumber
溢出時,循環才會終止。
for ( i = 1; i < userNumber; i++ ) {
userNumber *= i;
cout << userNumber;
}
這是問題:讓userNumber
= 5
i = 1, userNumber
= 5
i = 2, userNumber
= 10
i = 3, userNumber
= 50 ......
循環永遠持續。 因為每次i<userNumber
。
同樣作為一般建議,不要比較雙精度,請使用(ab) < epsilon;
要求elipson精確的地方。
問題是您將一個變量既用作循環邊界,又用作運行的累加器-每次循環時userNumber
增加,因此您將永遠無法使用它。
(表達式i < userNumber
不使用您開始循環時使用的userNumber
值,但始終在循環執行后與當前值進行比較。)
對結果使用單獨的變量:
int factorial = 1;
for ( i = 1; i < userNumber; i++ ) {
factorial *= i;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.