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中),如果演算法沒問題,一定能行
用c 語言求n的階乘,用c 語言求n的階乘
1 開啟vs6.0軟體,準抄備一個後襲綴為cpp的檔案,在c 檔案中首先寫入標頭檔案,定義一個處理階乘的函式,接著寫一個空的main函式 2 接著是階乘recv函式邏輯,該函式有一個形參n用來接收輸入的數。n的階乘是所有正整數的乘積,這裡的處理是sum不斷的用遞迴的方法乘以recv函式的輸入數,每次...
c語言怎麼用遞迴呼叫函式的方法求n的階乘
1 開啟vc6.0軟體bai,新建 一個duc語言的專案 2 接zhi下來編寫主程dao序,首先定義內用來求階乘的遞容歸函式以及主函式。在main函式裡定義變數sum求和,呼叫遞迴函式fact 並將返回值賦予sum,最後使用printf列印sum的結果,主程式就編寫完了 3 最後執行程式,觀察輸出的...
用c語言輸出n的階乘,執行結果不對,幫忙改下謝謝
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...