前言
这里呢,Godyu提供三份答案,其中最简单的一份来自OJ第三徐*陵(我打码了hhhhh
答案1(徐道*的) 一般我们就能写出来 sum=sum*i 这一步用来计算阶乘对吧~ 让后Godyu 就来给大家解析一下下面的 (不得不说咱们的徐佬的思路比其他的答案都好 徐佬NB
- while(sum>=10):检查sum大小
- sum=sum/10;:如果sum大于等于10,将sum除以10,以保持最高位数字。
- 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
- 最新
- 最热
只看作者