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的領域內有定義嗎...