請計算n!在n為什麼值時會溢位int和long long這是c語言

2022-10-24 19:19:23 字數 3596 閱讀 3509

1樓:匿名使用者

#include

#include

#include

struct list;

/*對於輸入的n想辦法晝精確地估計出n!所佔的位數.就能確定陣列元素的個數,

可以將n!表示成10的次冪,即n!=10^m(10的m次方)則不小於m的最小整數就是n!的位數,

對該式兩邊取對數,有=log10^n!即:

m = log10^1+log10^2+log10^3...+log10^n

迴圈求和,就能算得m值,該m是n!的精確位數*/

int getbitnum(int n)

return int(sum);

}/*建立連結串列,頭結點不儲存資料,每個節點表示一位

低位位在前,高位在後,如9302:

listhead--->2---->0---->3---->9;初始化為1*/

void createlist(list**l,int n)

(*l)->next->value=1;

(*l)->next->pre=*l;

}/*定義連結串列和整數的乘法,模仿進位進行計算*/

void mul(list*l,int num)

}/*定義階乘*/

void fac(list*l,int n)

}/*輸出連結串列*/

void echo(list*l,int n)

}int main()

bitnum=getbitnum(n);

createlist(&plist,bitnum);

fac(plist,n);

echo(plist,bitnum);

printf("\n是否再次繼續運算(y/n): ");

fflush(stdin);

scanf("%c",&flag);}}

2樓:靜faries默

如果計算結果超出了位數,就會發生溢位。

3樓:匿名使用者

只要計算結果超出位數就會溢位

求教:c++中int轉long long計算過程溢位怎麼解決?

4樓:匿名使用者

(ll) (n / i) * (ll) (m / i); 的意思是先轉換成ll再相乘,結果是ll型別的,

(ll) ((n / i) * (m / i)) 的意思是按int型別相乘得出積,積為int型別,再轉為ll,這樣的話,問題就來了

雖然n/i 和m/i都在int範圍內,但是他們的積越界了

5樓:泰山

溢位是無法解決的, 因為int它就同有long long儲存的資料大. 如果int比long long還大, 那要long long的型別有什麼用呢?

6樓:酷哥

c++中的long long型資料的長度是int型的兩倍。

例如int型資料時32位,則long long型是64位;

解決方法:

1、先將int型資料轉為long型;

2、再將裝換後的long型資料裝換為longlong型。

用c語言程式設計實現求1!+2!+3!+。。。+n!的值,其中n值由鍵盤輸入

7樓:free逍遙星空

#include

//64位機器最多隻能取到n = 31,再大資料會溢位int main()

for (int i = 1; i <= n; ++i)printf("the result is %lld\n", result);

return 0;}

編寫一個fac函式求一個數n的階乘。其函式原型為long fac(int n),然後呼叫該函式求1!+2!+3!+4!+5!+6!。

8樓:百問誰度

#include

int main()

long fac(int n)

printf("%d",s);

}去試試,看看是不是你想要的!希望幫到你哈

9樓:

#include "stdio.h"//

long fact(int n)

void main(void)

10樓:幫個忙好不

#include

long fac(int n)

int main()

c語言 int 和long int 問題

11樓:匿名使用者

不同平臺, int 和long int 長度可能不一樣,

這時候在x86平臺下,你的scanf("%d",&b)輸入long int就會出錯,

這又和位元組序有關,x86系列cpu採用

版little endian方式儲存資料,簡單的權說就是資料的高位元組在低地址,低位元組在高地址.

將&b開始的儲存空間從低位元組->高位元組依次記為b0 b1 b2 b3 b4 b5 b6 b7

當b 為int 則scanf("%d",&b)將資料儲存在b0 b1 b2 b3地址中,

低位元組存放在b3,如你輸入的23就存在b3中,而b0=b1=b2=0.

當b為long int時,如果是64位cpu,則long int長度為8位元組,這時實際資料的低位元組應該存放在b7中,最高位元組存放在b0中.可是你的scanf語句的引數確將b當成整數型別,輸入的資料低位元組不是存放在b7只是儲存在b3,結果本來應該是b7=23 b0=b1=...b6 = 0,可是你的錯誤導致了b3=23,b0=b1=b2=0, b4,b5,b6,b7隨機數.

所以當b為long int時,改成scanf("%ld",&b)就對了.

12樓:匿名使用者

在c語言中,int即整型型別,long int等同於long,為長整型型別。

二者區別與

內編譯器相容關。

1 16位編譯器。

int佔2位元組,範圍為-32768~32767

long int佔4位元組,範圍為-2147483648~2147483647

2 32位編譯器。

int 和long均佔4位元組,範圍均為-2147483648~2147483647

3 64位編譯器。

int 佔4位元組,範圍為-2147483648~2147483647

long因平臺實現不同而不同,有4位元組,6位元組和8位元組三種。可以列印sizeof(long)檢視。

13樓:

vc++6.0 驗證通過。。。不管是long int or int 都能通過編譯,並得到正確結果

14樓:匿名使用者

這個看環境16位環境int和long int一個16位一個32位,一個要用%d一個要用%ld

而32位環境int和long int %d和%ld是一樣的都是32位

15樓:匿名使用者

用long int定義a b後也是對的啊 我試了

16樓:匿名使用者

試試輸入的時候 改為 scanf("%ld",&b);

在C語言中,ifni0,是什麼意思n和i分別為數

這是一抄個條件判斷語句 n i即n整除襲i餘幾,n i 0表示 是否bain能夠整除dui,如果能夠整除,則n i 0則得到true,即條zhi件成立,運dao行if分支 如果能夠整除,則n i 0則得到false,即條件不成立,執行else分支 表示取餘操作。例如 n 5 i 2 則 n i 5 ...

為什麼出水BOD5,SS,NH3 N值都很低時,城鎮汙水處理

汙水中的cod問題copy cod是指在一定嚴bai 格的條件下,水中的還du原性物質在外加的強氧化zhi劑的作用下,被氧化分解 dao時所消耗氧化劑的數量,以氧的mg l表示。反映了水中受還原性物質汙染的程度,這些物質包括有機物 亞硝酸鹽 亞鐵鹽 硫化物等。有機物應該經過生化處理掉了,所以使cod...

為什麼函式在x處可以取到n階導數,必有函式在x的鄰域內取到n 1階導數

函式在點x處具有n階導數,則函式在x的某一鄰域內一定具有一切低於n階的導數內.因為 f 在點容 x 的 n 階導數定義為f n x lim h 0 f n 1 x h f n 1 x h,當然需要在x的某一鄰域內一定具有 n 1 階的導數.函式在x點存在n階導數,則n 1階導函式在x的領域內有定義嗎...