❶ while求n的階乘
您好,很高興回答您的問題。
在c語言中,用while計算n的階乘,主要就是要掌握循環變數循環變化、循環語句。具體為
#include<stdio. h>
void main()
{int i,n,s=1;
scanf("%d",&n);
while(i=1;i<=n;i++)
s=s*i;
printf("s=%d\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語言階乘問題 求一到一百的階乘和 用While或While do循環語句或for 語句
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
usingnamespacestd;
constintMAXN=510;
charre[MAXN];
structBig{
ints[MAXN],len;
Big():len(1){memset(s,0,sizeof(s));}
voidread()
{
scanf("%s",re);
intn=strlen(re);
len=(n-1)/4+1;intx=len,k=0;
while('0'<=re[k]&&re[k]<='9')
{
if(k&&k%4==n%4)x--;
s[x]=s[x]*10+re[k]-'0';
++k;
}
}
voidprint()
{
for(inti=len;i>=1;--i)
{
if(i!=len)printf("%04d",s[i]);
elseprintf("%d",s[i]);
}
}
Big&operator+=(Big&a)
{
intn=max(a.len,len);
for(inti=1;i<=n;++i)
s[i]+=a.s[i],s[i+1]+=s[i]/10000,s[i]%=10000;
while(s[len+1])len++;
return*this;
}
Big&operator*=(Big&a)
{
for(inti=len;i;--i)
{
for(intj=a.len;j-1;--j)
s[i+j-1]+=s[i]*a.s[j];
s[i]=s[i]*a.s[1];
intk=i;
while(s[k])
s[k+1]+=s[k]/10000,s[k]%=10000,++k;
}
while(s[len+1])len++;
return*this;
}
};
booloperator<(Big&a,Big&b)
{
if(a.len!=b.len)returna.len<b.len;
for(inti=a.len;i>=1;--i)
if(a.s[i]!=b.s[i])returna.s[i]<b.s[i];
returnfalse;
}
Bigoperator*(Big&a,Big&b)
{
Bigc=a;
returnc*=b;
}
Bigoperator+(Big&a,Big&b)
{
Bigc=a;
returnc+=b;
}
intmain()
{
Bigsum,x,i,dz,lim;
dz.s[1]=i.s[1]=x.s[1]=1;
lim.s[1]=101;
for(;i<lim;i+=dz)
sum+=x*=i;//從右往左運算,相當於x=x*i;sum=sum+x;
sum.print();
}
樓上用int的,自然溢出運行出來應該會是負數或者0.....題主以後如果出階乘題數據要小
運行結果:
❹ 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語言階乘怎麼表示
/*This program can calculate the factorial of (int n).*/
#include <stdio.h>
int factorial(int n)
{
return (n == 1)?n:factorial(n-1)*n;//recursion.
}
int main(void)
{
int n,fac;
printf("Please input the value of n:");//initialize n.
scanf("%d",&n);
fac = factorial(n)//variable fac is not necessary.
printf("The result is:%d ",fac);
return 0;
}
(5)c語言30階乘while擴展閱讀:
階乘是定義在自然數范圍里的(大多科學計算器只能計算 0~69 的階乘),小數科學計算器沒有階乘功能,如 0.5!,0.65!,0.777!都是錯誤的。但是,有時候我們會將Gamma 函數定義為非整數的階乘,因為當 x 是正整數 n 的時候,Gamma 函數的值是 n-1 的階乘。
❻ 用c語言求1-30之間的所有整數的階乘
#include<stdio.h>
main()
{
int i;
double n;//因為30!已經超出了int的表示範圍,所以用double
n=1.0;
for(i=1;i<=30;i++)
{
n*=i;
printf("%d!=%.0f\n",i,n);//輸出的時候,n保留0位小數
}
}
❼ C語言階乘 用 while
你的while執行時變數i沒有初始化(沒有值),因此,while循環被架空
要解決這個問題 你在while語句之前,必須給i賦初始值(比如寫上i=1;之類的)