`
睡着的兔子
  • 浏览: 34490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求阶乘集合

阅读更多

 

计算10000以内的阶乘

/* Factorial.c  -- 计算大数的阶乘

  * Author: Space

  * Date:    2007/07/03

  * Version: 1.0

  */

#include<stdio.h>

#include<stdlib.h>  // for malloc()

#include<string.h>  // for memset()

#define QUOTIETY  4  

// 内存分配系数,计算10000以内阶乘设置为4就足够,如果需要

// 计算更大的数的阶乘,则将该系数适当增大

void process(const int index, int *result);

int cnt = 1;

int main(void)

{

int index = 0;

int input = 0;

int *result = NULL;

// 获得输入数据

printf("请输入你要计算的阶乘数,内存有限,请不要超过10000:\n");

scanf("%d", &input);

while (input <= 0 || input > 10000)

{

printf("请输入合理的数据,谢谢:\n");

scanf("%d", &input);

}

// 申请空间储存计算结果

result = (int *)malloc(sizeof(int) * input * QUOTIETY);

if (result == NULL)

{

printf("内存申请失败!\n");

exit(-1);

}

memset(result, 0, sizeof(int) * input * QUOTIETY);  // 初始化存储空间

result[0] = 1;

// 进行阶乘计算

for ( index = 1; index <= input; ++index)

{

process(index, result);

}

// 打印结果

for (index = cnt - 1; index >= 0L; --index)

{

printf("%d", result[index]);

}

putchar('\n');

printf("结果一共有%d位数!\n", cnt);

free(result);

system("pause");

return 0;

}

/*

*  计算阶乘核心代码

  */

void process(const int index, int *result)

{

int product = 0;  // 乘积

int carry = 0;    // 进位

int remainder = 0;  // 余数

int i = 0;

for (i = 0; i < cnt; ++i)

{

product = result[i] * index + carry;

carry = product / 10;

remainder = product % 10;

result[i] = remainder;

}

if (carry != 0)

{

while (carry / 10 != 0)

{

result[cnt] = carry % 10;

carry /= 10;

++cnt;

}

result[cnt++] = carry;

}

}

 

有一些又是求一个数N!中末尾有多少个0?

这是我的思路

int count(int n)
{
   int count=0;//计数器
    int total =1;//乘积结果
     for(int i =1; i<=n;i++)   
    {      total = i*total;
         if(total%10==0)
         {
             count++;
             total=total/10;           
         }   
    
    }
    return count;
}
另一个算法:
就是寻找整除5的数
int First()
{
   int ret = 0;
   int j=0;
   for(int i=1; i<=N;i++)
   {
        j=i;
        while(j%5==0)
        {
           ret++;
           j=j/5;
        }   
           
    }   
    return ret;
}

int Second(int N)
     int ret=0;
     while(N)
     {
        ret=ret+N/5;
        N=N/5; 
             
     }
    return ret;
    
}

 

分享到:
评论

相关推荐

    例3-19for求阶乘.zip

    2. "例3-19for求阶乘.sln" - 这是Visual Studio解决方案文件,用于管理一个或多个相关项目的集合,通常包含了项目设置和引用信息。 3. "例3-19for求阶乘" - 这可能是源代码文件,很可能包含用C#、C++或其他支持for...

    用数组求N的阶乘,可以运行

    在编程领域,阶乘是一个常见的数学概念,通常...总的来说,数组求N的阶乘是基础的算法实现,它有助于我们理解递归、循环以及数组在解决问题中的应用。在实际编程中,我们应根据具体需求和资源限制选择合适的计算方法。

    大数的阶乘非递归算法C#源码

    ArrayList是C#中用于动态数组的一种集合类型,它可以存储任意类型的对象,包括自定义的数字类,这使得它成为处理大数的理想选择。 实现大数阶乘的非递归算法通常涉及到迭代的方式,逐个乘以前面计算出的所有数。...

    使用C语言求N的阶乘的方法

    用递归法求N的阶乘 程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解. 递归的能力在于用有限的语句来定义对象的无限集合。 一般来说,递归需要有...

    链表初级学习范例(实现大数阶乘)

    链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在本示例中,我们关注的是双向链表的实现,它用于计算大数阶乘。这个初级学习范例是为初学者设计的,帮助他们理解和...

    阶乘与排列组合算法 各行各业都能用到

    )是计算一个正整数n的所有小于等于n的正整数乘积,而排列组合则是解决如何从给定元素集合中选择特定数量的元素,考虑顺序或者不考虑顺序的问题。 首先,我们来详细解释阶乘。阶乘在数学上定义为n! = n × (n-1) ×...

    C#制作的计算器(专用版)

    此外,可能还会使用到数组或集合来存储历史计算记录,或者实现科学计算模式下的对数、指数、平方根等高级功能。 对于初学者来说,这个项目是一个很好的起点,可以帮助他们掌握C#的基本编程技巧,了解如何构建GUI...

    VB程序设计的常用算法大集合-珍藏版.doc

    这些算法涵盖了从简单的计数、求和、求阶乘到更复杂的任务,如寻找最大公约数、最小公倍数,甚至判断素数。以下是对这些常见算法的详细解释: 1. 计数、求和、求阶乘: 在VB中,计数、求和和求阶乘通常涉及循环...

    Ackerman,Fabonacci,Hanoi,阶乘,排列,整数划分

    例如,对于集合{1, 2, 3},有6种不同的排列:123, 132, 213, 231, 312, 321。生成排列可以使用回溯算法或堆排序等方法。 整数划分是指将一个正整数n划分为若干个正整数的和,要求这些正整数互不相同。例如,将7划分...

    阶乘matlab代码-Matlab-Octave:Matlab-Octave

    阶乘matlab代码 MATLAB /八度 这些存储库是在MATLAB / Octave中构建的有用算法和数据结构的集合。 此外,您还将从项目欧拉问题集中找到解决方案。 该存储库中的代码是针对MATLAB和Octave的跨portabel。 什么是八度...

    c常用算法集合

    8. **递归算法**:递归是解决一些具有自相似性质问题的有效手段,如阶乘计算、汉诺塔问题、树的遍历等。 9. **字符串处理**:KMP算法用于字符串匹配,Boyer-Moore算法是另一个高效的字符串搜索算法。此外,还有字符...

    集合论与图论07答案1

    - 满射的个数计算涉及到排列,当Y的大小大于等于X时,从X到Y的满射个数等于Y的大小减去X的大小再乘以Y的大小的阶乘除以X的大小的阶乘(第5题)。 6. **集合运算**: - 两个集合的并集、交集、差集和补集的运算...

    常用C语言程序集合的文本文档

    这里有两种不同的方法来求1到100的整数之和。第一种使用`goto`语句,虽然在现代编程实践中不推荐使用,但在这里演示了如何利用它构建一个无限循环。第二种方法使用`do-while`循环,先执行一次循环体,然后检查条件...

    acm入门题目集合

    此题涉及高精度计算,要求求出一个大数的阶乘最后一位非零数字。可以使用数学方法,例如模运算,避免直接计算大数的阶乘。对于n!,可以先计算n与(n-1)!的模20的余数,然后用这个余数乘以n再取模20,以此类推,直到n...

    JAVA面视题集合下载

    递归是函数调用自身的一种技术,用于解决复杂问题,例如阶乘、树的遍历等。Java中使用递归需要注意防止栈溢出。 3. 委托和事件:虽然这是.NET的特性,但Java中有类似的概念。Java中的接口可以视为委托,它们定义了...

    JAVA算法题目集合.pdf

    【JAVA算法题目集合】 在Java编程中,算法是解决问题的核心,本题目集合涵盖了基础题、深入题和综合题,旨在提升编程者对算法的理解和应用能力。以下是对部分题目的详细解析: A1. 最小公倍数/最大公倍数: 计算两...

    Java编程实践:10个实用例子助您提升技能正则表达式、文件操作、日期和时间处理、数据结构、集合类、接口和多态、递归、多线程编程

    9. 使用Java集合类实现队列:演示了如何使用Java集合类中的Queue接口来实现队列数据结构。 10. 多线程编程:创建和启动线程:展示了如何通过实现Runnable接口创建一个新线程,并演示了多线程编程的基本概念。

    java计算器源码集合

    这个文件可能是一个改进版的计算器,它可能包含了基本的算术运算,如加减乘除,也可能包含了一些更复杂的功能,比如求平方根或阶乘。通过阅读源码,我们可以学习到如何在Java中定义方法来处理不同的运算,以及如何...

    C++课件c++04-1模块化与函数-(2)(PPT文档).ppt

    为了优化代码,可以将求阶乘的部分抽象出来,设计一个求阶乘的函数。这样,我们创建了一个名为`fac`的函数,它接收一个整数作为参数,并返回该数的阶乘。在主函数中,我们只需调用`fac(a)`、`fac(b)`和`fac(c)`,将...

Global site tag (gtag.js) - Google Analytics