计算n的阶乘;计算1-n的阶乘之和;

文章详细介绍了如何使用C语言计算单个数的阶乘以及输入多个数后计算阶乘之和,提供了两种方法:一是利用多次循环,二是优化为一次循环。展示了完整的代码示例。
摘要由CSDN通过智能技术生成

一、计算n的阶乘。

1.定义整形变量n,使用scanf函数输入所要求的数;
int main()
{
	int n = 0;
	scanf("%d", &n);
2.定义循环变量i;
	int i = 0;
	int ret = 1;
3.定义整形ret变量,并使用for循环和 ret *=i,每循环一次,i++,再与ret相乘;
for (i = 1;i <=n ;i++)
	{
		ret = ret *i;
	}
	printf("%d\n", ret);
4.最后算出n的阶乘,输出结果;

5.完整代码;
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 1;
	
	for (i = 1;i <=n ;i++)
	{
		ret = ret *i;
	}
	printf("%d\n", ret);
   return 0;
}

二、输入多个数,计算他们的阶乘。

1.在题目一的基础上,在for循环的外部加入while,以scanf的返回值为循环的判断条件,读到值就可以循环;
	while (scanf("%d", &n) != 0)
	{
		ret = 1;
		for (i = 1;i <= n;i++)
		{
			ret = ret * i;
		}

		printf("%d\n", ret);
	}
2.注意阶乘变量的初始化,算完一个数的阶乘,要将他初始为1,否则里面的值还是上次循环的值;
ret = 1;
3.输出结果;

4.完整代码:
int main()
{
	int n = 0;
	
	int i = 0;
	int ret = 1;
	while (scanf("%d", &n) != 0)
	{
		ret = 1;
		for (i = 1;i <= n;i++)
		{
			ret = ret * i;
		}

		printf("%d\n", ret);
	}
	return 0;
}

三、计算1-n的阶乘之和。

法一:利用多次循环;
1.定义循环和计算阶乘所需要的变量;
int x = 0;
	int i = 0;
	int ret = 1;
	int m = 0;
	int n = 0;
2.最里面的一层是计算阶乘;
for (i = 1;i <= x;i++)
			{
				ret = ret * i;//ret*=i //每次用ret都要从1开始
			}
3.第二层,通过输入的n,开始for循环,循环变量x由1到n,从而计算出1到n的阶乘,并用m+=ret求出和,不要忘记将ret初始化;
for (x = 1;x <= n;x++)//171-180行是求一次的代码
		{
			ret = 1;//每次要将ret重置
			for (i = 1;i <= x;i++)
			{
				ret = ret * i;//ret*=i //每次用ret都要从1开始
			}
			m = m + ret;//m+=ret//每次用m都要从0开始
			
		}
4.最外层以while和scanf函数返回值构成整体循环,实现多组输入,注意每次要将和的初始变量初始化;
while (scanf("%d", &n) != 0)
	{
		m = 0;//多重循环要注意变量充值
		for (x = 1;x <= n;x++)//171-180行是求一次的代码
		{
			ret = 1;//每次要将ret重置
			for (i = 1;i <= x;i++)
			{
				ret = ret * i;//ret*=i //每次用ret都要从1开始
			}
			m = m + ret;//m+=ret//每次用m都要从0开始
			
		}
		
		printf("%d\n", ret);
		
	}
5.输出结果; 

6.整体代码;
int main()
{
	int x = 0;
	int i = 0;
	int ret = 1;
	int m = 0;
	int n = 0;
	while (scanf("%d", &n) != 0)
	{
		m = 0;//多重循环要注意变量充值
		for (x = 1;x <= n;x++)//171-180行是求一次的代码
		{
			ret = 1;//每次要将ret重置
			for (i = 1;i <= x;i++)
			{
				ret = ret * i;//ret*=i //每次用ret都要从1开始
			}
			m = m + ret;//m+=ret//每次用m都要从0开始
			
		}
		
		printf("%d\n", ret);
		
	}
	return 0;
}
法二:利用一次循环;
1.将第二次循环的内容简化,ret*=x,循环变量每次加1,紧接着与ret相乘,就实现了阶乘;
for (x = 1;x <= n;x++)//171-180行是求一次的代码
		{
			ret = ret * x;
			m = m + ret;
		}
2.m+=ret;每次算完ret,紧接着相加,求出阶乘之和,循环一次,算出1的阶乘,循环两次,算出2的阶乘,并算出1和2的阶乘之和,循环n次,算出n的阶乘,并算出1-n的阶乘之和;
3.多组输入时注意变量的初始化;
ret = 1;
		m = 0;
4.输出结果;

5.完整代码;
int main()
{
	int x = 0;
	int i = 0;
	int ret = 1;
	int m = 0;
	int n = 0;
	//while (scanf("%d", &n) != 0)
	//{
	//	m = 0;//多重循环要注意变量充值
	while (scanf("%d", &n))
	{
		ret = 1;
		m = 0;
		for (x = 1;x <= n;x++)//171-180行是求一次的代码
		{
			ret = ret * x;
			m = m + ret;
		}

		printf("%d %d\n", ret, m);

		/*}*/
	}
	return 0;
}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值