1樓:匿名使用者
你問的什麼啊?
不是求n的階乘啊,是求n的階乘的最高位數?理論上哪有最高位數?你們老師yy了吧
在c或c++中你階乘一上去變數就會溢位,你的意思是問臨界溢位的時候這個階乘的最高位數嗎?
那你去看你的機器位數和c版本不就得了。
2樓:匿名使用者
int n;
int a=1;
char buf[9];//可以自己設定
scanf("%d",&n);
for (int i=1;i<=n;i++)sprintf(buf,"%d",a);//整數與字元轉換printf("%c\n",buf[0]);//列印最高位值printf("%d\n",a);//n階層的值
c語言 求階乘的最高位數 5
3樓:木有想到
while(s/10)
printf("%d", s);
算出來n!後的s,用以上**就能出來最高位數了,請採納,謝謝
4樓:聽不清啊
這個n最大是多少?
#include
int main()
for(;s>1000000;)s/=10;
x=(long)s;
while(x>10)x/=10;
printf("%ld\n",x);
system("pause");
return 0;}
如何求n階乘的最高位,求大牛啊,最好能具體點,謝啦,呵呵~ 注:n不大於100萬。求演算法或c++程式。
5樓:御含靈
設n!=x.yzzyz*10^k
x=1~9
取以10為底的對數
log(n!)=k+log(x.yzzyz)
可見x.yzzyz=10^( log(n!)-(int)log(n!));
x=(int)(10^( log(n!)-(int)log(n!)));
log(n!)=log(1)+....+.....+log(n)
也就是說先計算以10為底的log(n!)
算好了求得它的整數部分(int) log(n!)
然後獲得小數部分( log(n!)-(int)log(n!))
然後求10的方冪 pow(10,( log(n!)-(int)log(n!)));
然後取整就得到了(int)pow(10,( log(n!)-(int)log(n!)));
6樓:匿名使用者
int fac(unsigned n)
int main()
修改演算法了。。。
c++求n的階乘!
7樓:理陽波
以下為c++求階乘的四種方法,需要注意的是,各個**只是提供了求階乘的思路,以便在實際需要時再來編碼,各個程式都在1到10內測試正確。
1、該程式在每次輸入n時,都會呼叫fac()來暴力計算以得到結果:
2、該程式利用了陣列記錄已得到的結果,並在計算下一個結果時利用了已得到的結果。
3、應該說該**實用性最差,主要是來學習靜態區域性變數來了。
4、此**較不常用,思路比較新奇,但可以嘗試。
擴充套件資料執行程式後,1-10的結果如下,可供檢驗:
1、當i為:1時階乘值為:1
2、當i為:1時階乘值相加為:1
3、當i為:2時階乘值為:2
4、當i為:2時階乘值相加為:3
5、當i為:3時階乘值為:6
6、當i為:3時階乘值相加為:9
7、當i為:4時階乘值為:24
8、當i為:4時階乘值相加為:33
9、當i為:5時階乘值為:120
10、當i為:5時階乘值相加為:153
11、當i為:6時階乘值為:720
12、當i為:6時階乘值相加為:873
13、當i為:7時階乘值為:5040
14、當i為:7時階乘值相加為:5913
15、當i為:8時階乘值為:40320
16、當i為:8時階乘值相加為:4623317、當i為:9時階乘值為:362880
18、當i為:9時階乘值相加為:40911319、當i為:10時階乘值為:362880020、當i為:10時階乘值相加為:4037913
8樓:
c++求n的階乘**如下:
#include
using namespace std;
int fac(int);
int main()
int n;
while(cin>>n)
cout int fac(int x) register int i,f=1; //定義暫存器變數for(i=1;i<=x;i++) f*=i; return f; 9樓:匿名使用者 int factorial(int n) while(carry)//如果有進位 }printf("結果是:\n%d ! = ",n);//顯示結果for(i = digit; i >=1; --i)return 0;} 10樓:磨曠方旭堯 這要看看printf這個函式是如何使用的 printf("1~20!階乘之和sum=%d\n",sum); 這個函式是輸出的意思 引號前面的都是直接輸出的意思,「1~20!階乘之和sum=」%d表示在這裡要輸出一個整數,整數的值在引號外面給出(這裡是後面的sum),\n表示輸出一個換行符,這樣在你輸出這一行之後相當於又輸出了個回車 11樓:王姝邱綺露 我就簡單寫個吧; intn=5; //比如求5的階乘 intresult=1; for(int i=1; i<=n; i++) //迴圈完成後,result就是結果 樓上用的是遞迴的方法。初入門的話,可能看起來有點難度。 呵呵,慢慢來吧,學c++,一定要回遞迴的。 12樓:匿名使用者 for (;;) console.writeline("的階乘值為", num, jc); console.writeline("你是否還需要使用此階乘計算器,1-是,2-否"); int numb = int.parse(console.readline()); if (numb == 1) if (numb == 2) }console.readkey(); 13樓:匿名使用者 #include using namespace std; int main() cout << n << " 的階乘為:"<< " = " << factorial; return 0;} 14樓:匿名使用者 #include using namespace std; long long f(long long n)else }int main() c++程式設計:求n的階乘 15樓: 可能是因為12的階乘太大了吧,超出了int 型資料的表示範圍。可以改用unsigned long型別試一下。 如果想求更大的數的階乘,則就不可以 了,這時可以應採用陣列儲存一個大的整數。這樣就可以解決很大的數的階乘問題。 16樓:匿名使用者 13!已經超過整形限制範圍,要用高精度演算法才能對 17樓:匿名使用者 int 整數型別只有 32767 負32767 long 的比較大 18樓: 把變數的資料型別都改成long long型的(c++/cli中),如果演算法沒問題,一定能行 1 開啟vs6.0軟體,準抄備一個後襲綴為cpp的檔案,在c 檔案中首先寫入標頭檔案,定義一個處理階乘的函式,接著寫一個空的main函式 2 接著是階乘recv函式邏輯,該函式有一個形參n用來接收輸入的數。n的階乘是所有正整數的乘積,這裡的處理是sum不斷的用遞迴的方法乘以recv函式的輸入數,每次... 1 開啟vc6.0軟體bai,新建 一個duc語言的專案 2 接zhi下來編寫主程dao序,首先定義內用來求階乘的遞容歸函式以及主函式。在main函式裡定義變數sum求和,呼叫遞迴函式fact 並將返回值賦予sum,最後使用printf列印sum的結果,主程式就編寫完了 3 最後執行程式,觀察輸出的... include int main printf d n sum return 0 改為 include int main printf d n sum return 0 int i 0 int j 0 int n 0 int sum 0 新增變數初始化,再試試 再說階乘的演算法也不正確n!n n 1...用c 語言求n的階乘,用c 語言求n的階乘
c語言怎麼用遞迴呼叫函式的方法求n的階乘
用c語言輸出n的階乘,執行結果不對,幫忙改下謝謝