当前位置:首页 » 编程语言 » 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);
}