用C语言求N的阶层。程序怎么写
1、使用递归算法
#include stdio.h
#include process.h
long factorial(int n)
{
long result;
if (n0)
{
printf(“n0,请输入大于等于0的整数!”);
return -1;
}
else if (n == 0 || n == 1)
{
result = 1;
}
else
{
result = n*factorial(n – 1);
}
return result;
}
main()
{
int n = 10.0;
long iNum;
iNum = factorial(n);
printf(“10!=%ld\n”, iNum);
system(“pause”);
}
2、使用循环
#includestdio.h
#includeprocess.h
int main()
{
int i = 1; //累加变量
long j = 1; //储存结果
int k = 1; //输入的数值
printf(“请输入一个数字:”);
scanf(“%d”, k);
do
{
j = j*i;
i++;
} while (i = k);
printf(“%ld\n”, j);
system(“pause”);
return 1;
}
以上两种方式是求阶乘的普通算法,求得的结果表示范围都是有限的,如果算大数的阶乘还要另外的算法。
用C语言 编写10的阶层 怎么写
#include stdio.h
int main()
{
int i=0;
long temp=1;
long sum=0;
for(i=1;i=10;i++)
{
temp*=i;
sum+=temp;
}
printf(“sum=%ld\n”,sum);
return 0;
}
利用for循环期求出第n项阶乘的积,然后前n-1项的阶乘的和加上第n项阶乘,当n等于10的时候就是所求。
C语言中阶乘怎么输?
1、不是直接输入n!,需要一定的算法才可以实现。具体方法是,首先打开编辑器,准备好空白的C语言文件:
2、在编辑器中输入代码,这里所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n。C语言中可利用循环解决,可以假设循环变量为 i,初值为 1,i 从 1 变化到 n;依次让 i 与 sum 相乘,并将乘积赋给 sum,最后输出sum的值就可以了:
3、在编辑器中运行程序,随意输入一个数,按下回车键,即可打印出阶乘的结果来:
c语言编程求n的阶层怎么编写?
代码:
script
jc = function (i)
{ jg = 1;
for(j=1;j=i;j++)
{
jg *= j;
}
return jg;
}
alert(jc(5));//这里填写了5,当然可以换成其它的了
/script
//结束
::以下是C语言,复制后改成:C用VC打开他运行即可
::START,写是个函数,你应该会调用吧.直接jc (N),N是你想要计算的数值
int jc function (i) {
int jg=1;
for (j=1;jg=i;j++)
{
jg *=j;
}
return jg;
}
::END
用C语言编写计算阶层的程序 求任意数的阶层 怎么写
给,已经编译运行确认:
#includeconio.h
#includestdio.h
#includestdlib.h // for malloc()
#includestring.h // 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位数!
C语言的代码 阶层问题
首先,这个叫做“阶乘”而不是“阶层”。
其次,return
1是因为
0!
=
1,数学上就是这么定义的,这个和C语言无关。
递归有两个阶段,第一阶段是反复地调用自身,直到触发终止条件;第二阶段是,逐层计算并返回调用结果。
就拿你这个例子来说,假设要计算4的阶乘,首先是递归地调用自身:
4!
=
func(4),
此时n为4大于0,所以func(4)
=
4
*
func(4-1)
=
4*func(3)
同样地:
3!
=
func(3)
=
3*func(3-1)
=
3*func(2)
2!
=
func(2)
=
2*func(2-1)
=
2*func(1)
1!
=
func(1)
=
1*func(1-1)
=
1*func(0)
这时注意了,当计算func(0)时,n=0,触发边界条件,所以递归调用停止,return
1。
接下来,就是以相反的顺序,,逐层返回结果了:
0!
=
func(0)
=
1
1!
=
func(1)
=
1*func(0)
=
1*1
=
1
2!
=
func(2)
=
2*func(1)
=
2*1
=
2
3!
=
func(3)
=
3*func(2)
=
3*2
=
6
4!
=
func(4)
=
4*func(3)
=
4*6
=
24
这样就得到了最终的结果:24。