當前位置:首頁 » 編程語言 » c語言無限計算階乘問題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言無限計算階乘問題

發布時間: 2023-02-18 11:03:48

㈠ 用c語言用循環實現N的階乘

不要用數組,用vector來實現相應的功能,我給你寫個大概的框架,你向裡面添加就好了

#include<stdio.h>
#include<stdlib.h>
#include<vector> //addnew
usingnamespacestd;
#defineN10//算N的階乘
intmain()
{//數組1位1!
//intary[N]={1,1};
vector<int>ary;
ary.resize(N);
//此處的N就可以是非const類型的量
//然後你把ary當成ary[N]數組用就可以了
inti,j;
for(i=2;i<=N;i++)
{
//各個下標的階乘,第0位下標是位數,所以從第1位開始
for(j=1;j<=ary[0];j++)
{
ary[j]=ary[j]*i;
}
//處理進位問題1W就進一位
for(j=1;j<=ary[0];j++)
{
if(ary[j]>=10000)
{
//進位
ary[j+1]=ary[j+1]+ary[j]/10000;
//進位後就只留下余數
ary[j]=ary[j]%10000;
}
}
//有進位的話,位數就+1
//這里j已經是位數大於1了
if(ary[j]>=1)
{
ary[0]++;
}
}

//倒序輸出
for(j=ary[0];j>0;j--)
{
printf("%d",ary[j]);
}
printf(" ");
return0;
}

㈡ 無限循環計算階乘問題

應該是1被 第一個 ch=getchar()吃掉了
改成do while試試

㈢ c語言如何連續求無數個階乘,用while循環結構

使用double型最多精確計算 22 的階乘,算不了 100的階乘,所以不需要用double型,直接用long型就可以了,long型最多隻能算 20的階乘。

#include<stdio.h>

intmain(){
longresult=1;
intn=1;
inti=1;
while(1){
printf("請輸入求階乘中的n(1~20),輸入負整數退出本程序:");
scanf("%d",&n);

if(n<0){
break;
}elseif(n==0){
continue;
}elseif(n>=1&&n<=20){
result=1;
for(i=1;i<=n;i++){
result*=i;
}
printf("%d的階乘是%ld ",n,result);
}
}
}

㈣ 用c語言寫n可為無限大(至少能算兩千)的階乘

#include<stdio.h>

int main( )
{
int n;
scanf("%d", &n)
int j, i, k = 0, t = 0, p = 0;
int sum = 0, s[ 16000 ] = { 0 };
s[ 0 ] = 1;
for(j = 1; j <= n; j++ )
{
for( i = 0; i <= t; i++ )
{
sum = s[ i ] * j + p;
p = 0;
if( sum > 9999 )
{
s[i] = sum % 10000;
p = sum / 10000;
if( t == i )
{
t++;
s[ t ] = 0;
}
}
else
s[i] = sum;
}
}
printf("%d", s[ t ]);
for( i = t - 1; i >= 0; i-- )
{
if ( s[ i ] < 10 ) printf("000");
else if ( s[ i ] < 100 ) printf("00");
else if ( s[ i ] < 1000 ) printf("0");
printf("%d", s[ i ]);
}
printf("\n");
return 0;
}
用高精度演算法求階層的代碼,在下面的地址里也有和你類似的問題。

㈤ c語言 編程實現求n!要求用定義求階乘的函數

1、打開vs2017軟體,新建c語言的工程,首先開頭引入頭文件,然後調用先調用一下求階乘的函數和空的主函數,最下方定義prime函數用來求階乘:

㈥ c語言計算階乘問題

這里的s表示的是i的階乘。sum表示的是i
循環一次累加一次的階乘的求和。
你分析的前兩次沒有錯誤,第三次s=6,sum=9,i=4;
後幾次你計算的應該也錯了。

㈦ C語言計算階乘

scanf("%d \n",&b);有個空格:scanf("%d\n",&b);就行了

㈧ c語言計算階乘問題

printf("%d!=%d\n",&n,&s);
改為
printf("%d!=%d\n",n,s);
去掉&符號,否則你輸出的是n和s的地址

㈨ C語言中如何編程計算階乘

常見的有兩種:

遞歸版本:

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

還有一種是循環版:

intans=1;
for(inti=1;i<=n;i++)ans*=i;

測試方法:

#include<stdio.h>

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}

有個值得注意的地方:階乘時,數增大的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。

㈩ 利用C語言求階乘 例如求20! 用循環和函數兩種方法……

對於階乘,你需要考慮到輸入的數的大小,進行判斷n<0,無階乘;n==0||n==1階乘為1;
n>1的就用戶循環,或者調用函數來做
1.循環
#include<stdio.h>
void main()
{
float sum=1;
int n,i;
printf("please enter an integer number:");
scanf("%d",&n);
printf("\n");
if (n<0)
printf("n<0,data error!\n");
else if(n>1)
{
for(i=2;i<=n;i++)
sum=sum*i;
printf("%d!=%10.0f\n",n,sum);
}
else
if(n==0||n==1)
{
sum=1;
printf("%d!=%10.0f\n",n,sum);
}
}
2.函數
#include <stdio.h>
void main()
{
float fac(int n);
int n;
float y;
printf("input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%10.0f\n",n,y);
}

float fac(int n)
{
float f;
if(n<0)
{
printf("n<0,data error");
}
else
if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return (f);
}