TOJ1011 阶乘末尾非零数求和

原创 2005年06月01日 16:58:00

/*

阶乘末尾非零数求和

http://acm.tongji.edu.cn/people/ps/showproblem.php?problem_id=1011

Time Limit:1s Memory Limit:1000k
Total Submit:4671 Accepted:1317

Problem

对于小于25000的自然数n,求阶乘n!,(n-1)!,(n-2)!...3!,2!,1!右边的非零数之和。

例如:

当n=5时,
5!=120,右边非零数为2;
4!=24,右边非零数为4;
3!=6,右边非零数为6;
2!=2,右边非零数为2;
1!=1,右边非零数为1。
其右边的非零数之和为15。

Input

本题有多组数据,每组数据包含一个正整数N(N不大于25000)占一行。

Output

对给定的每组输入数据,输出一个整数。每个结果占一行。不要输出额外的空行。

Sample Input

Sample Output

T_T 超郁闷的题目……

Run ID  User  Problem  Result                   Memory  Time  Language  Date

263600  kingwei  1011  Accepted                   28 k 659 ms C 2005-06-01 16:59:22
263554  kingwei  1011  Time Limit Exceeded              C 2005-06-01 16:03:42
263477  kingwei  1011  Wrong Answer         36 k  10 ms C 2005-06-01 14:37:16
263466  kingwei  1011  Wrong Answer         36 k   6 ms C 2005-06-01 14:28:36
263463  kingwei  1011  Wrong Answer         44 k   6 ms C 2005-06-01 14:27:20 

*/

#include <stdio.h>

#define MAX_NUM 25000
#define MAX_LEN 1600

int start, end;
int workarr[MAX_LEN] = {1, 0};
int res[MAX_NUM] = {0, 1};

int main()
{
 int n, i, j, carry, temp;
 
 start = 0;
 end = 0;
 for (i=2; i<MAX_NUM; i++)
 {
  carry = 0;
  for (j=start; j<=end; j++)
  {
   workarr[j] = workarr[j]*i+carry;
   carry = workarr[j]/10000;
   workarr[j] %= 10000;
  }
  while (carry > 0 && end<MAX_LEN)
  {
   end++;
   workarr[end] = carry%10000;
   carry /= 10000;
    }
  while (workarr[start] == 0)
   start++;
  temp = workarr[start];
  while (temp%10 == 0)
   temp /= 10;
  res[i] = res[i-1]+temp%10;
 }
    
 while (scanf("%d", &n) != EOF)
 {
  printf("%d/n", res[n]);
 }

 return 0;
}

计算阶乘最后20个非零数据

  • 2007年10月26日 09:23
  • 69KB
  • 下载

阶乘末尾非0

最近的阶乘问题接触的比较多。 计算n!的末尾非0数是一个比较经典的问题。 那么对于小数据的该问题,还是比较容易的。 RQNOJ点击打开链接SWOJ点击打开链 小数据的方法都是可以过的。 ...

n的阶乘末尾还有多少个0

n! 末尾有多少个 0 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索“cqs_2012”即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己...

n!阶乘末尾有多少个零0

题目: 初阶:1*2*3*……*100 求结果末尾有多少个零。 进阶: N的阶乘末尾有多少个0分析: 一般类似的题目都会蕴含某种规律或简便方法的阶乘末尾一个零表示一个进位,则相当于乘以10而10...

N的阶乘(N!)中的末尾有多少个0?

问题:N的阶乘(N!)中的末尾有多少个0? 例如:N = 5,N! = 120.末尾有1个0.分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有...

写一个算法计算n的阶乘末尾0的个数

题目 写一个算法计算n的阶乘末尾0的个数 解答 首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是...

滴滴2017校园招聘编程题——阶乘末尾0的个数

滴滴出行2017校园招聘编程题:1000以内某个数的阶乘结果,求其中末尾0的个数。...

给定一个整数N,那么N的阶乘N!末尾有多少个0呢?求N!的二进制表示中最低位1的位置。

题目1:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。 初看这样的题目可能会想到直接求出N!的阶乘,然后再计算出0的个数。 显...

N的阶乘中末尾有几个0

N的阶乘中末尾有几个0: 如果N!= K×10M,且K不能被10整除,那么N!末尾有M个0。再考虑对N!进行质因数分解,N!=(2^x)×(3^y)×(5^z)…,由于10 = 2×5,所以M只跟X...

求阶乘N!末尾0的个数

POJ上有这个题目。http://poj.org/problem?id=1401。去掉一大堆没有用的信息,POJ的描述如下:For example, they defined the function...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TOJ1011 阶乘末尾非零数求和
举报原因:
原因补充:

(最多只允许输入30个字)