郑州轻工业OJ1089: 阶乘的最高位详细解析三份答案!

前言

这里呢,Godyu提供三份答案,其中最简单的一份来自OJ第三徐*陵(我打码了hhhhh

这里是1089答案+解析

答案1(徐道*的) 一般我们就能写出来 sum=sum*i 这一步用来计算阶乘对吧~ 让后Godyu 就来给大家解析一下下面的 (不得不说咱们的徐佬的思路比其他的答案都好 徐佬NB

  1. while(sum>=10):检查sum大小
  2. sum=sum/10;:如果sum大于等于10,将sum除以10,以保持最高位数字
  3. printf(“%d”,(int)sum);:使用printf函数输出最(int)sum用于将浮点数总和
#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int i;
	double sum=1;
	for(i=1;i<=n;i++)
	{
		sum=sum*i;
		while(sum>=10)
		{
			sum=sum/10;
		}
	}
	printf("%d",(int)sum);
	return 0;
}

答案3思路和答案1一样 和答案2个人感觉麻烦且难以理解,我就不解释了-直接放出来

答案2

#include<stdio.h>
#include<math.h>

//阶乘的最高位 
int main(void)
{//声明变量 
 int n, i, len, t;
 double fact = 1;
 //输入n 
 scanf("%d", &n);
 for(i = 1; i <= n; i ++)
 {//求阶乘 
  fact *= i;
  if(fact >1000000000)
  {//降低位数,避免溢出 
   fact /= 1000;
  }
  
 }
 len = (int)log10(fact);
 t = fact / (pow(10, len));
 printf("%d\n", t);
 
 return 0;
}

答案3

#include<stdio.h>
int main()
{
	double s=1;//s要用 double,因为结果要中间结果考虑四舍五入 
	int a; //定义整型a 
	scanf("%d",&a);
	while(a!=1)//开始循环计算 
    {
	s*=a;
	while(s>=10)//当s>=10的时候 
	{
		s/=10;//能够影响结果的只有最高位数字 
	}
	a--;//循环变量递减 
    }
	printf("%d",(int)s);//强制转换,如果是double会四舍五入,所以变成int 
 } 
------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞8 分享
评论 共1条
头像
善语结善缘,恶语伤人心
提交
头像

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情图片