/************************************************************
算法思想:在1-10两个数相乘要产生0,只有 10×1=2×5,2×5。
200!=200×199×198……×2×1=2×5×2×5×2×199…. ×2×1;可以分解为质数相乘的形式,
很明显有2的个数比5的多,所以只要求出200的阶乘可分解出多少个5相乘,
就可得到200的阶乘结尾的连续的零的个数.
即:num=[200/5]+[200/5/5]+[200/5/5/5].
注: [x]表示对x取整.
所以可以通过这个思路很容易的得到任意阶乘结尾连续的零,其示例C语言代码如下:
*************************************************************/
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
using namespace std;
#define MAX 100
//MAX 是计算结果的最大位数 取为100位
void factorial(int n,char output[])
{
int i, j, cin, tmp;
int result[MAX];
memset(result, 0, sizeof(result)); //初始化为0
result[0] = 1;
for(i = 2; i <= n; ++i) //从2 开始计算阶乘
{
算法思想:在1-10两个数相乘要产生0,只有 10×1=2×5,2×5。
200!=200×199×198……×2×1=2×5×2×5×2×199…. ×2×1;可以分解为质数相乘的形式,
很明显有2的个数比5的多,所以只要求出200的阶乘可分解出多少个5相乘,
就可得到200的阶乘结尾的连续的零的个数.
即:num=[200/5]+[200/5/5]+[200/5/5/5].
注: [x]表示对x取整.
所以可以通过这个思路很容易的得到任意阶乘结尾连续的零,其示例C语言代码如下:
*************************************************************/
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
using namespace std;
#define MAX 100
//MAX 是计算结果的最大位数 取为100位
void factorial(int n,char output[])
{
int i, j, cin, tmp;
int result[MAX];
memset(result, 0, sizeof(result)); //初始化为0
result[0] = 1;
for(i = 2; i <= n; ++i) //从2 开始计算阶乘
{