一般老师喜欢 用递归调用法计算 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!的阶层等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)