Devc 寫完階乘程式之後,執行時黑屏,輸入數字沒反應?怎麼回事?

2025-01-23 06:00:31 字數 3671 閱讀 8127

1樓:改芹中

解決了嗎,我也是這樣。下面的**看不懂。

為什麼我的程式,在devc++上可以執行,但在vs2017上執行結果不一樣,也沒報錯。

2樓:gta小雞

如果你的程式在不同的編譯器上執行結果不一樣,那說明你的**中存在未定義行為。

求c++高手:下面程式執行時輸入比較大的數會出現異常,如輸入123456789,為什麼?如何能求出精確值?

3樓:

在計算機中,所有的資料型別的表示範圍都是有限的,這個題是求階乘,當輸入123456789,求的是123456789有階乘123456789!,這是個無法想象有多大的數,變數p裝不下了。

4樓:網友

溢位了,自己實現乙個大數結構,實現它的乘法操作。

5樓:網友

1000的階乘已經就是10的2500多次方了,123456789的階乘結果是多少位呀?那麼大的數,用什麼能存下呢,呵呵就算設計乙個大數浮點結構,也得計算上半天了。

c++,求n個數的階乘和,程式執行不了。。。

6樓:網友

思路是對的!但是sunfac函式你犯錯了。

1.類似sunfac(n)=sunfac(i); //不能給函式賦值。只能給變數賦值。

函式思路是對的。求和的過程是不需要遞迴的。其實直接寫就行。比如改成這個樣子。

int sunfac(int n)

return sunfac(n);

int isum = 0 ; //弄個求和的臨時變數。

for(int i = 1;i <= n ;i++)//從1一直增加到n.

return isum;

這個問題這麼改就行了。

追加問題:變數是int型別的,所以其肯定會有乙個最大範圍。這個最大範圍是多少?

2.知道isum的範圍後,按照這個思路,求出輸入整數n的最大值。

3.既然n已經有最大值了,那麼如果輸入比最大值大的數程式就會出錯,應該怎麼限制一下?

型別int 用另乙個型別替換一下使其範圍變大。

5.將來你再看這題時,能否適當的寫乙個「類」,替換int 型別。來使得階乘的範圍進一步擴大。(*這個題先不用考慮,現在不是時機)。

7樓:網友

還是把**貼上來吧,看不清楚。

求n! 編寫乙個c語言程式,不要c++,可以求乙個大數n的階乘(n!),n的值範圍從1~100之間變化。

8樓:南見雪

#include

#define max 1001 //1001表示這個大數n的階層結果最多隻能是1000位,注意 下面的程式是從a[1]開始存數。

using namespace std;

計算n的階乘。

int jisuan(int n,int a)while(carry>0) //計算一輪後,還得檢驗carry的值,如果carry不為0 ,繼續進位。

digit=j-1; //計算一輪後,將當前的位數賦給digit}return digit;

按格式輸出n的階乘。

void shuchu(int digit2,int a)cout<>n;

int a[max];

int digit=jisuan(n,a);

cout<<"***n";

cout這個絕對可用且很好,老師驗收過的。

9樓:新新

樓上的都只能算到17就溢位了,別人已經研究的很透徹了看下面文章:

c++求n的階乘!

10樓:理陽波

以下為c++求階乘的四種方法,需要注意的是,各個**只是提供了求階乘的思路,以便在實際需要時再來編碼,各個程式都在1到10內測試正確。

1、該程式在每次輸入n時,都會呼叫fac()來暴力計算以得到結果:

2、該程式利用了陣列記錄已得到的結果,並在計算下乙個結果時利用了已得到的結果。

3、應該說該**實用性最差,主要是來學習靜態區域性變數來了。

4、此**較不常用,思路比較新奇,但可以嘗試。

11樓:網友

c++求n的階乘**如下:

#include

using namespace std;

int fac(int);

int main()

int n;

while(cin>>n)

coutint fac(int x)

register int i,f=1; //定義暫存器變數for(i=1;i<=x;i++)

f*=i;return f;

12樓:匿名使用者

int factorial(int n)

while(carry)//如果有進位 }printf("結果是:%d ! = ",n);//顯示結果for(i = digit; i >=1; -i)return 0;}

13樓:磨曠方旭堯

這要看看printf這個函式是如何使用的。

printf("1~20!階乘之和sum=%d",sum);

這個函式是輸出的意思。

引號前面的都是直接輸出的意思,「1~20!階乘之和sum=」%d表示在這裡要輸出乙個整數,整數的值在引號外面給出(這裡是後面的sum),表示輸出乙個換行符,這樣在你輸出這一行之後相當於又輸出了個回車。

14樓:王姝邱綺露

我就簡單寫個吧;

intn=5;

比如求5的階乘。

intresult=1;

for(int

i=1;i<=n;

i++)/迴圈完成後,result就是結果。

樓上用的是遞迴的方法。初入門的話,可能看起來有點難度。

呵呵,慢慢來吧,學c++,一定要回遞迴的。

15樓:匿名使用者

for (;

的階乘值為", num, jc);

你是否還需要使用此階乘計算器,1-是,2-否");

int numb = ;

if (numb == 1)

if (numb == 2)};

c++求階乘的程式

16樓:你不知道的細節

if (b<=n+1)

這裡的if語句出現問題;

if語句執行時到b++;a=b時就結束了;

並不會迴圈執行;

所以你的結果會是一直是2;

你應該用for迴圈語句;

17樓:網友

因為你用的是if(b<=n+1),只會執行一次,而且邏輯也有問題;

你可以試試。

if (b<=n+1)

替換成:while(a<=n)

18樓:網友

既然是階乘,最簡單的就用迴圈噻。

#include

using namespace std;

void main()

cout<

19樓:禾土

if是判斷語句,不是迴圈。

matlab調式程式執行時間長除錯時希望從指定

可以覆在需要停止的地方加制入 keyboard 那麼程式執行到這個地方時 會中斷,命令提示符會由 變為k 此時,你可以在k 後輸入變數名或者修改變數的值。如果想繼續執行 可以按f5鍵。如果想退出除錯,可以在k 後輸入 dbquita 10 keyboard 在k 後輸入 a 20 不要雙引號 再按 ...

VB程式照著書上打下來的,執行時始終程式不對,求大神修改,萬分感謝!!急用

vb已不再支援read data語句了 可直接用賦值語句 read n,m,h read x 0 ip for i 0 to m 1 read y 0,i next i data 50,5,0.5 data 0 10 data 1 0 0 0 0 n 50 m 5 h 0.5x 0 0 ip 10 ...

加工中心程式在自動執行時,怎麼進行刀補?還有怎麼運用單節執行

g41或者g42都是刀具直徑補正的命令,單段執行在裝置操作面板上肯定有一個按鍵的。我有一臺數控立式加工中心,使用的是fanuc oimc的系統,在自動執行程式時,單節執行按鈕突然執行,導致程式 單節執行按鈕突然執行,沒有太大問題,再按 迴圈啟動 按鈕,就接著繼續執行。如果是單節按鈕壞了,重新換一個就...