编写程序求n的阶乘n!

编写程序求n的阶乘n!,第1张

一般老师喜欢 用递归调用法计算 n! 显得高大上。

可以用累乘简单算出。改 double 型则 应用数值范围 更大。

#include <stdioh>

int fun(int n){

if (n<1) {printf("=== n must >= 1\n");return 1;}

if (n==1)return 1;

else return nfun(n-1);

}

int fun2(int n){

int i,r=1;

for (i=1;i<=n;i++) r=ri;

return r;

}

int main()

{

int n;

printf("input n:\n");

scanf("%d",&n);

printf("%d\n",fun(n)); // 高大上方法

printf("%d\n",fun2(n)); //简单适用方法

return 0;

}

1、不是直接输入n!,需要一定的算法才可以实现。具体方法是,首先打开编辑器,准备好空白的C语言文件:

2、在编辑器中输入代码,这里所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n。C语言中可利用循环解决,可以假设循环变量为 i,初值为 1,i 从 1 变化到 n;依次让 i 与 sum 相乘,并将乘积赋给 sum,最后输出sum的值就可以了:

3、在编辑器中运行程序,随意输入一个数,按下回车键,即可打印出阶乘的结果来:

不递归

#include <iostream>

using namespace std;

int main()

{

int i,n,rel;

cout<<"输入n:"<<endl;

cin>>n;

for(i=1;i<n+1;i++)

rel = i;

cout<<rel<<endl;

return 0;

}

递归:

#include <iostream>

using namespace std;

int fac(int);

int main()

{

int n,rel;

cout<<"输入n:"<<endl;

cin>>n;

rel = fac(n);

cout<<rel<<endl;

return 0;

}

int fac(int i)

{

if(i == 0)

return 1;

else

return i fac(i-1);

}

给,已经编译运行确认:

#include<conioh>

#include<stdioh>

#include<stdlibh> // for malloc()

#include<stringh> // for memset()

#define QUOTIETY 4 // 内存分配系数,计算10000以内阶乘设置为4就足够,如果需要

// 计算更大的数的阶乘,则将该系数适当增大

void process(const int index, int result);

int cnt = 1;

int main(void)

{

int index = 0;

int input = 0;

int result = NULL;

int count=0;

// 获得输入数据

printf("请输入你要计算的阶乘数n:\n");

scanf("%d", &input);

while (input <= 0)

{

printf("请输入合理的数据,谢谢:\n");

scanf("%d", &input);

}

// 申请空间储存计算结果

result = (int )malloc(sizeof(int) input QUOTIETY);

if (result == NULL)

{

printf("内存申请失败!\n");

exit(-1);

}

memset(result, 0, sizeof(int) input QUOTIETY); // 初始化存储空间

result[0] = 1;

// 进行阶乘计算

for ( index = 1; index <= input; ++index)

{

process(index, result);

}

// 打印结果

for (index = cnt - 1; index >= 0L; --index)

{

printf("%d", result[index]);

count++;

if(count%40==0) printf("\n");

}

putchar('\n');

printf("结果一共有%d位数!\n", cnt);

free(result);

getch();

return 0;

}

/

计算阶乘核心代码

/

void process(const int index, int result)

{

int product = 0; // 乘积

int carry = 0; // 进位

int remainder = 0; // 余数

int i = 0;

for (i = 0; i < cnt; ++i)

{

product = result[i] index + carry;

carry = product / 10;

remainder = product % 10;

result[i] = remainder;

}

if (carry != 0)

{

while (carry / 10 != 0)

{

result[cnt] = carry % 10;

carry /= 10;

++cnt;

}

result[cnt++] = carry;

}

}

运行示例:

请输入你要计算的阶乘数n:

200

7886578673647905035523632139321850622951

3597768717326329474253324435944996340334

2920304284011984623904177212138919638830

2576427902426371050619266249528299311134

6285727076331723739698894392244562145166

4240254033291864131227428294853277524242

4075739032403212574055795686602260319041

7032406235170085879617892222278962370389

7374720000000000000000000000000000000000

000000000000000

结果一共有375位数!

#include<stdioh>

int main()

{

int a=1,i;

for(i=1;i<=10;i++)

a=ai;

printf("10的阶乘=%d",a);

return 0;

}

扩展资料:

在C语言中,有三种类型的循环语句:for语句、while语句和do While语句。分别介绍如下:

for

for为当型循环语句,它很好地体现了正确表达循环结构应注意的三个问题:

⑴控制变量的初始化。

⑵循环的条件。

⑶循环控制变量的更新。

while:

while结构循环为当型循环(when type loop),一般用于不知道循环次数的情况。维持循环的是一个条件表达式,条件成立执行循环体,条件不成立退出循环。

while语句格式为:

while(条件表达式)

循环体

每次执行循环体前都要对条件表达式进行判断。

参考资料来源:百度百科-循环语句

以上就是关于编写程序求n的阶乘n!全部的内容,包括:编写程序求n的阶乘n!、C语言中阶乘怎么输、用C++如何求n!的阶层等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9624772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存