阶乘

阶乘之计算从入门到精通-菜鸟篇

旧时模样 提交于 2020-04-23 07:31:50
摘要:本文给出一些最简单的计算阶乘的程序,这也是许多C语方言初学者写出的算阶乘的程序。它虽然不能正确地计算出大数阶乘,但它依然有许多正确的思想。让我们从错误中开始,开始一个漫长的,充满乐趣的探索大数阶乘计算之路吧… 程序1,一个最直接的计算阶乘的程序 #include "stdio.h" #include "stdlib.h" int main(int argc, char* argv[]) { long i,n,p; printf("n=?"); scanf("%d",&n); p=1; for (i=1;i<=n;i++) p*=i; printf("%d!=%d/n",n,p); return 0; } 程序2,稍微复杂了一些,使用了递归,一个c++初学者写的程序 #include <iostream.h> long int fac(int n); void main() { int n; cout<<"input a positive integer:"; cin>>n; long fa=fac(n); cout<<n<<"! ="<<fa<<endl; } long int fac(int n) { long int p; if(n==0) p=1; else p=n*fac(n-1); return p; } 程序点评,这两个程序在计算12以内的数是正确,但当n>12

【题解】阶乘因子

不想你离开。 提交于 2020-03-26 12:38:46
题目描述 桐桐刚刚学习了自然数N的阶乘:阶乘(N!)被定义成从1到N的所有整数的乘积,例如5!=5×4×3×2×1=120。随着数N的增大,N!增长的非常快,5!=120,10!=3628800。桐桐想到了一种方法来列举那么大的数:不是直接列出该数,而是按照顺序列举出该数中各个质数因子出现的次数。如825可描述为(0 1 2 0 1),意思是对825分解质因数,这些质数因子中有0个2,1个3,2个5,0个7,1个11。请你编一个程序,读入N值,帮助桐桐按顺序输出N!所包含的质数因子的个数。 输入输出格式 输入格式 一行,一个整数N。(2≤N≤100000) 输出格式 一行,一个N!中所包含的质数因子的个数(从最小的质数开始)的序列,数与数之间用一个空格隔开。 输入输出样例 输入样例 53 输出样例 49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 题解 表面上看枚举每一个因子的质因子很麻烦,其实可以顺推,枚举每一个数可以作为哪些数的质因子,在这个过程中顺便可以把合数给筛掉。 有一个可以优化的地方:素数除了2以外都为奇数,可以利用这个特性使枚举时间减半。 #include <iostream> #include <cstdio> using namespace std; int n; int a[100001]; int p[100001]; int main()

(PTA)6-2 使用函数求1到10的阶乘和 (10分)

风格不统一 提交于 2020-03-11 23:35:25
本题要求实现一个计算非负整数阶乘的简.单函数,使得可以利用该函数,计算1!+2!+⋯+10!的值。 函数接口定义: double fact( int n ); 其中n是用户传入的参数,其值不.超过10。如果n是非负整数,则该函数必须返回n的阶乘。 裁判测试程序样例.: #include <stdio.h> double fact( int n ); int main(void) { int i; double sum; sum = 0; for(i = 1; i <= 10; i++) sum = sum + fact(i); printf("1!+2!+...+10! = %f\n", sum); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 本题没有输入。 输出样例: 1!+2!+…+10! = 4037913.000000 double fact ( int n ) { int i ; double p ; p = 1 ; for ( i = 1 ; i <= n ; i ++ ) { p = p * i ; } return p ; } 来源: CSDN 作者: Overdrive13 链接: https://blog.csdn.net/Overdrive13/article/details/104804960

递归

喜你入骨 提交于 2020-03-11 03:20:25
什么问题可以用递归? 当前问题可以进行拆分,拆分为子问题。子问题的本质和父问题是一样的,解决了子问题,父问题也就迎刃而解。同时子问题可以继续向下分解。 例如:数组排序问题 分解为数组左边部分排序和又边部分排序 找数组最大数问题 找数组左边最大数和数组右边最大数,然后返回最大的那一个 求 n 的阶乘 等价于求(n-1)的阶乘再乘以n n-1的阶乘等于n-2的阶乘再乘以n-1 递归行为 递归行为在程序执行时,相当于系统帮程序员进行压栈出栈的行为,在压栈的时候不仅会将要执行的函数、变量等压入栈中,同时还会记录当前执行到程序的哪一行。 递归的时间复杂度估算 master公式的使用 T(N) = a*T(N/b) + O(N^d) log(b,a) > d -> 复杂度为O(N^log(b,a)) log(b,a) = d -> 复杂度为O(N^d * logN) log(b,a) < d -> 复杂度为O(N^d) 例如:找数组最大值 int Maxnum ( vector < int > & obj , int left , int right ) { if ( left == right ) return obj [ left ] ; int mid = ( left + right ) / 2 ; int left_max = Maxnum ( obj , left , mid )

1173:阶乘和

邮差的信 提交于 2020-03-02 14:54:18
1173:阶乘和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6010 通过数: 3049 【题目描述】 用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。 输入正整数n,输出计算结果S。 【输入】 一个正整数n。 【输出】 计算结果S。 【输入样例】 5 【输出样例】 153 思路: 分2个函数来操作,阶乘处理 和加的处理 组合 完成 # include <cstdio> # include <iostream> using namespace std ; int len = 1 , t [ 10001 ] , ans [ 10001 ] , anslen , n ; void jiecheng ( int s ) { for ( int i = 1 ; i <= len ; i ++ ) t [ i ] * = s ; int i = 1 ; while ( t [ i ] > 9 || i < len ) { t [ i + 1 ] + = t [ i ] / 10 ; t [ i ] % = 10 ; i ++ ; } len = i ; } void jia ( ) { for ( int i = 1 ; i <= len ; i ++ ) { ans [ i ] + = t [ i ]

计算n的阶乘,n可输入

烈酒焚心 提交于 2020-03-01 03:45:30
计算n的阶乘,n可输入 // 5 != 5 * 4 * 3 * 2 * 1 * 1; // 4 != 4 * 3 * 2 * 1; var n = parseInt(window.prompt('请输入n的值:')); var mul = 1; for (var i = 1; i <= n; i++) { mul *= i; } document.write(mul); 来源: CSDN 作者: Eli-sun 链接: https://blog.csdn.net/vfjcgg/article/details/104572446

求某个数的阶乘

孤街浪徒 提交于 2020-03-01 03:19:03
此代码易学 #include<iostream> using namespace std; int fac(int); int main() { int n; while (cin >> n) { cout << n << "!= " << fac(n) << endl; } return 0; } int fac(int x) { register int i, f = 1; for (i = 1; i <= x; i++) f *= i; return f; } 下面这个较为高效。 #include <iostream> using namespace std; int main() { int i, n, factorial=1; cout << "请输入数字:"; cin >> n; for (i = 1; i <= n; i++) { factorial *= i; } cout << factorial << endl; return 0; } 来源: CSDN 作者: 处女座绛翎儿 链接: https://blog.csdn.net/shnagmiao/article/details/104574178

python学习笔记三

倾然丶 夕夏残阳落幕 提交于 2020-02-26 20:14:47
  函数:   __doc__:显示函数文档:也可使用help()      函数中无法直接修改全局变量,需要对变量定义为global:      global适用于函数内部修改全局变量的值   nonlocal适用于嵌套函数中内部函数修改外部变量的值      使用MyFunction1 时返回的是MyFunction1 这个函数;   使用MyFunction1() 时返回的是MyFunction1 () 执行后的返回值,如果MyFunction1 ()函数没有返回值则返回值为None,      lambda匿名函数:使用过后被清除,没有名字       fileter()函数: 用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。   最终得出结果为true的新列表:       递归算法:    递归算法求阶乘: 1 ###递归函数求阶乘 2 def jiecheng(number): 3 if(number == 1): 4 return 1 5 else: 6 return number*jiecheng(number-1) 7 number = int(input('请输入一个正整数:')) 8 print(number,'的阶乘为:',jiecheng(number)) 递归求阶乘   结果:      

7-2 求阶乘问题

£可爱£侵袭症+ 提交于 2020-02-24 13:36:42
7-2 求阶乘问题 输入一个正整数n,输出n!。 输入格式: 输入在一行中给出1个正整数n。 输出格式: 在一行中输出n!的值。 输入样例: 4 输出样例: 24 代码如下: #include<stdio.h> double ff(double n); int main(void) { int i,n; scanf("%d",&n); double fff=ff(n); printf("%.0lf\n",fff); return 0; } double ff(double n) { double f; if(n==1) f=1; else f=ff(n-1)*n; return f; } 来源: CSDN 作者: 鯐藍 链接: https://blog.csdn.net/qq_45052346/article/details/104450423

阶乘

痞子三分冷 提交于 2020-02-16 14:29:12
阶乘 请用程序实现 输入一个正整数num,计算这个正整数的阶乘,并将计算结果输出。 # 请使用 input() 输入一个正整数 num num = int ( input ( ) ) count = 1 # 请计算这个正整数的阶乘,并将计算结果输出 for i in range ( num , 1 , - 1 ) : count = count * i print ( count ) 来源: CSDN 作者: Nasinhore 链接: https://blog.csdn.net/qq_43191251/article/details/104338895