❶ 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;之类的)