使用C语言计算n的阶乘详解

        一、前言

        在学习循环的过程中,学习到了n的阶乘的如何使用c语言来表达,分享给大家,我们只需要使用一个for循环就可以实现n的阶乘了,让我们来看看它是如何实现的吧!

        题目描述:

        有一天杰克在做数学题的时候又又想到了,我应该怎么使用程序的方式来表示n的阶乘呢,杰克最近学习c语言有点魔怔了,你可不可以帮帮他。

        输入描述:

        一行,输入你想要求阶乘的数。

        输出描述:

        一行,输出阶乘计算的结果

        我们这里是求n的阶乘,话不多说,开干!

        二、代码表示

        

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int i = 1;
    int n = 1;
    int ret=1;//不考虑溢出问题,定义一个ret存放每次乘的乘积。
	scanf("%d", &n);
	for (i = 1;i <= n;i++)
	{
		ret = ret*i;//n阶乘,i要为0,i不为0乘积一直为0
	}
	printf("您的计算结果是:%d", ret);
	return 0;
}

       三、溢出问题不考虑

        我们写出这个代码了,可以看到,这边注释很是详细,首先是一个溢出问题我们这里不考虑,溢出问题就是我们输出的数如果太大太大的话,这边是放不下的,就会输出0;

        比如我们要求66的阶乘的话:

      

        这边就会输出0

        小一点的话都是可以正常计算的

        

        所以我们这里不考虑溢出问题

        四、代码详解:

        首先我们定义一个整型i,因为我们如果需要使用for循环的话,是一定要定义一个字符来进行循环的运算的,i就是运算的一个载体,之后我们判断这个程序的结束标志,当i小于n的时候,唉,对了,我们在写for循环的时候发现,有一个变量n,我们没有对它进行定义,这里我们再定义一个变量n,我们判断一下循环什么时候停止,这里是因为我们需要计算n的阶乘的话,i肯定是不能比n大的吧,所以我们表达式2就用来判断,我们这里是i<n,那么这里又有疑惑了,我们是使用i<n,还是i<=n呢,我们这里先不考虑,继续往下走,我们对循环条件进行一个调整,i++,好吗,这里我们for循环的3个表达式就写完了;

        我们接着看这个代码,我们要计算阶乘,它的数学模型是n*(n-1)*(n-2).....*2*1是这个样子,就是我们从它当前的值一直乘直到1,那么我们如何使用计算机语言来把它表述出来呢,我们定义一个ret来存放我们乘i之后得到的值,这里为什么要乘i,我们看看这个循环,是因为我们定义了一个for循环,这个循环用来遍历i直到n,但是n的阶乘的表示是n乘n-1直到1,一个是1到n,一个是n到1,这就是在程序中,表示和数学不一样的地方,我们继续来看,从1开始分析,因为我们for循环遍历i也是从一开始i=1时,我们将i乘ret放进ret里,这是1的阶乘,之后我们ret里面的值不要动,再次循环,i=2的时候,我们用这个2,来乘ret中的1,这是不是就是2的阶乘了,是用2来乘1的阶乘,使它变为2的阶乘,这里数字小大家可能感觉没有那么深刻,我们继续看这个程序,把2放人ret里,这个时候i=3,我们使用3来乘ret,得到的值,就是3的阶乘,这里这个3的阶乘,是用3乘2的阶乘得到的,我们如此反复循环。

        五、对i<n和i<=n的判断

        直到i<n,这个时候我们发现如果我们要求10的阶乘,当i=10的时候i不小于n,这个时候ret里面是之前的9乘ret,是9的阶乘,这个与我们的目的冲突,所以这里我们要使用小于等于,i<=n,这样,我们就完成了整个n阶乘的运算。

        之后我们直接输出ret,这里ret的值,就是我们阶乘之后得到的值。

        又是一次酣畅淋漓的分享,希望大家可以从我写的东西中可以有一些收获,如果有不足也请指正哦,在评论区里我都会看的嘞!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值