轻院1089 阶乘的最高位

Description

输入一个正整数n。输出n!的最高位上的数字。

Input

输入一个正整数n(n不超过1000)。

Output

输出n!的最高位上的数字。

Sample Input

1000

Sample Output

4

HINT

注意double类型溢出问题。

Source

****


题意概括:输出一个小于或等于1000的数的阶乘


解题思路:

1:因为数非常大,因此要考虑类型溢出的问题。

2:因为是求最高位,所以可以通过除以1000抛掉后面几位,避免类型溢出


错误原因:无,一次通过


经验总结:无。


我的AC代码:


#include<stdio.h>
#include<math.h>
int main(void)
{
 int n, i,m, t;
 double sum = 1.0;
 scanf("%d", &n);
 for(i = 1; i <= n; i ++)
 {
  sum *= i;
  if(sum >1000000000)
  {
   sum/= 1000;
  }
  
 }
 m =(int)log10(sum);
 t = sum/(pow(10, m));
 printf("%d\n", t);
 
 return 0;
}

posted @ 2017-10-13 19:42  moonlight987  阅读(454)  评论(0编辑  收藏  举报