c - 计算1到20的阶乘

 1 #include <stdio.h>
 2
 3 /*
 4 题目:求 1+2!+3!+...+20!的和
 5 */
 6 unsigned long long int
 7 factorial(long n) {
 8     unsigned long long int tmp = 1;    //每一个数的阶乘,如,1!,2!,3!...20!.
 9     unsigned long long int sum = 0;    //总和,即1+2!+3!+...+20!的和.
10     for(long long int i = 1; i <= n; i++)     {
11         tmp *= i;
12         sum += tmp;
13     }
14
15     return sum;
16 }
17
18 int
19 main(void) {
20     unsigned long long int r = factorial(20);
21     printf("%llu\n", r);
22
23 /*
24 _int64 fact = 1,i,sum = 0;
25     for(i = 1; i < 21; ++i)    {
26         fact *= i;
27         sum += fact;
28     }
29     printf("sum = %I64d\n",sum);
30 */
31 }
时间: 2024-11-05 13:41:07

c - 计算1到20的阶乘的相关文章

6-10 阶乘计算升级版(20 分)

6-10 6-10 阶乘计算升级版(20 分) 本题要求实现一个打印非负整数阶乘的函数. 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000.如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印"Invalid input". 裁判测试程序样例: #include <stdio.h> void Print_Factorial ( const int N ); int main()

计算一个大数n的阶乘的位数宽度(十进制)转载

计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )转载 输入: 每行输入1个正整数n, (0<n<1000 000) 输出: 对于每个n,输出n!的(十进制)位数. 分析: 这道题采用蛮力法.根据定义,直接求解! 所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n; lg(n!)=lg(2)+......lg(n); 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )

输入: 每行输入1个正整数n, (0<n<1000 000) 输出: 对于每个n,输出n!的(十进制)位数. 分析: 这道题采用蛮力法.根据定义,直接求解! 所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n; lg(n!)=lg(2)+......lg(n); 代码: //输入一个数字n,请你计算该数的阶乘的十进制数的位数宽度 //比如:3!=6, 则宽度为1 //样例数据: //n=3 输出1 //n=32000 输出130271 //n=10

计算一个整数(N)的阶乘的位数

对于一个正整数N, 计算N! 的位数.例如N=4, 4!=24,那么位数就是2. 直接计算N!的数值,然后再去数位数,这个很难,因为N!很有可能超过int(32bit) 或long(64bit)的表达范围. 换一种思路,假设要求的位数为x, 那么一定满足 10^(x-1) <=N!<10^x.两边取10为底的对数,得到x-1<=log10(N!)<x.最终x 取 int(log10(N!))+1. log10(N!) = log10(N)+log10(N-1)+log10(N-2)

计算阶乘的和

编写java程序,使用while循环语句计算1+1/2!+1/3!+...+1/20!之和 1 public class Factorial { 2 3 public static void main(String[] args) { 4 int n = 20; 5 double sumFactorial = 0.0; 6 while (n > 0) { 7 sumFactorial += (1.0 / calculateFactorial(n)); 8 n--; 9 } 10 System.o

大数阶乘的位数和精确值计算【转】

来源:http://www.cnblogs.com/stonehat/p/3603267.html 在此,顶礼膜拜一下原文作者呵呵 我们知道整数n的位数的计算方法为:log10(n)+1 故n!的位数为log10(n!)+1 如果要求出n!的具体值,对很大的n(例如n=1000000)来说,计算会很慢,如果仅仅是求阶乘的位数,可以用斯特林(Stirling)公式求解 斯特林(Stirling)公式: 于是求n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1 即 1/2*l

JNI测试-java调用c算法并返回java调用处-1到20阶乘的和

一,java端: 定义native方法, 'public native long factorial(int n);', 该方法用c/c++实现,计算'1到20阶乘的和',参数中'int n'是前n项的阶乘的和(这里是20).返回计算结果,并返回java调用处. 代码为: 1 public class FactorialJava { 2 3 public native long factorial(int n); 4 5 //evaluate the elapse time.and the ex

利用c语言计算n的阶乘及其求和(多种方法)

计算某一个数的阶乘: #include <stdio.h> int main() { int n,i; scanf("%d",&n); for(i=n-1;i>0;i--) { n=n*i; } printf("%d",n); return 0; } 计算1!+2!+3!+...+10! #include <stdio.h> int  main() { int a,b,c; int sum=0; for(a=1;a<=10

java quartz 计算近20次执行时间

/** * * @desc 计算表达式近20次时间 * @auth josnow * @date 2017年5月31日 下午12:16:25 * @param cron * @return */ public static List<String> seeExcuteTime(String cron) throws ParseException, IllegalArgumentException { if (StringUtils.isEmpty(cron)) { throw new Ille