sdut oj 简单n!

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定一个数n(0 <= n <= 150), 求0到n中所有数的阶乘。

输入

题目有多组数据,处理到文件结尾。输入一个数n。

输出

输出阶乘,形式如:4! = 24.每组数据输出后跟一个空行。

示例输入

  1. 1
  2. 4

示例输出

  1. 0! = 1
  2. 1! = 1
  3.  
  4. 0! = 1
  5. 1! = 1
  6. 2! = 2
  7. 3! = 6
  8. 4! = 24

提示

 代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <iomanip>
  7. #include <cctype>
  8. #include <string>
  9.  
  10. using namespace std;
  11.  
  12. //实现1->150的阶乘
  13.  
  14. int main()
  15. {
  16. int r[];
  17. int i, j, k, c;
  18. int t;
  19. int n;
  20. while(scanf("%d", &n)!=EOF)
  21. {
  22. if(n==)
  23. {
  24. printf("0! = 1\n\n");
  25. continue;
  26. }
  27. if(n==)
  28. {
  29. printf("0! = 1\n1! = 1\n\n");
  30. continue;
  31. }
  32.  
  33. printf("0! = 1\n1! = 1\n");
  34. for(i=; i<=; i++)
  35. {
  36. r[i]=;
  37. }
  38.  
  39. r[]=j=;
  40. for(i=; i<=n; i++)
  41. {
  42. for(k=; k<j; k++)
  43. {
  44. r[k]=r[k]*i;
  45. }
  46. for(k=c=; k<j; k++ )
  47. {
  48. t=r[k]+c;
  49. r[k]=t%;
  50. c=t/;
  51. }
  52. while(c)
  53. {
  54. r[j]=c%;
  55. c=c/;
  56. j++;
  57. } //处理高位的那部分的进位问题
  58. //printf("%d---\n", j) ;
  59. printf("%d! = ", i );
  60. for(k=j-; k>=; k--)
  61. {
  62. printf("%d", r[k] );
  63. }
  64. printf("\n");
  65. }
  66. printf("\n");
  67. }
  68.  
  69. return ;
  70. }
  71.  
  72. 除法的没涉及!有待添加
  73.  
  74. /**************************************
  75. Problem id : SDUT OJ 2059
  76. Result : Accepted
  77. Take Memory : 496K
  78. Take Time : 10MS
  79. Submit Time : 2015-01-11 08:22:42
  80. **************************************/

                                               HDU OJ    n!

Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
 算法分析:和上一道题目一样也是 大数*小数的数组模拟!
 开二维数组太大开不出来,只好一维每次都要计算一遍。最好是打表存储好1到10000的阶乘数,直接输出就好了,但是10000的阶乘大约有57000位,需要开的内存太大!
 代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <ctype.h>
  5. #include <algorithm>
  6. #define mem(a) memset(a, 0, sizeof(a));
  7. using namespace std;
  8. int r[];
  9. int pos[];
  10.  
  11. void jiecheng(int n)
  12. {
  13. int i, j, k, c, t;
  14. mem(r);
  15. r[]=j=;
  16. for(i=; i<=n; i++)
  17. {
  18. for(k=; k<j; k++)
  19. {
  20. r[k]=r[k]*i; //上一行的数值进行 乘计算
  21. } //逐位进行计算
  22. for(k=c=; k<j; k++) //初始进位数为0
  23. {
  24. t=r[k]+c; //当前值+进位数
  25. r[k]=t%; //取余即为该位数
  26. c=t/; //进位数
  27. }
  28. while(c)
  29. {
  30. r[j]=c%;
  31. c=c/;
  32. j++;
  33. }
  34. }
  35. for(i=j-; i>=; i--)
  36. printf("%d", r[i]);
  37. printf("\n");
  38. }
  39.  
  40. int main()
  41. {
  42. int n;
  43. while(scanf("%d", &n)!=EOF)
  44. {
  45. if(n== ||n==)
  46. {
  47. printf("1\n");
  48. continue;
  49. }
  50. else
  51. {
  52. jiecheng(n);
  53. }
  54. }
  55. return ;
  56. }

顺便提一下,如何计算一个数n的阶乘结果的位数,这是数学方法,不理解的话记住就好!

所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n;

lg(n!)=lg(2)+......lg(n);

代码:

  1. #include <string>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <stdio.h>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11. long int n;
  12. long int i;
  13. double sum;
  14.  
  15. while(scanf("%ld", &n)!=EOF)
  16. {
  17. sum=0.0;
  18. for(i=; i<=n; i++)
  19. {
  20. sum+=log10(i);
  21. }
  22. printf("%ld\n", (int)sum+ );
  23. }
  24. return ;
  25. }

阶乘问题(大数阶乘)简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )的更多相关文章

  1. nyist28大数阶乘

    http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们 ...

  2. 大数阶乘(c语言)

    大数阶乘.代码比较简单. #include<stdio.h> #include<string.h> #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 ...

  3. 【大数阶乘】NYOJ-28

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  4. 大数阶乘 nyoj

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  5. 【ACM】大数阶乘 - Java BigInteger实现

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  6. nyoj___大数阶乘

    http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知 ...

  7. HDU 1133 Buy the Ticket (数学、大数阶乘)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  8. 51nod1057—N的阶乘—(大数阶乘)

    1057 N的阶乘  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的准确值.   Input 输入N(1 <= N <=  ...

  9. 大数阶乘(c++实现)

    #include <iostream>using namespace std;#define N 1000int BigNumFactorial(int Num[], int n);voi ...

  10. np问题(大数阶乘取模)

    转自 np问题 题目描述: LYK 喜欢研究一些比较困难的问题,比如 np 问题. 这次它又遇到一个棘手的 np 问题.问题是这个样子的:有两个数 n 和 p,求 n 的阶乘对 p 取模后的结果. L ...

随机推荐

  1. hdu3038 How Many Answers Are Wrong

    TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always wo ...

  2. Contest Hunter #46 T1 磁力块 [分块]

    描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距离不大于磁石A ...

  3. 跳蚤 BZOJ 4310

    跳蚤 [问题描述] 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典序最 ...

  4. Laravel 视图中的url

    <a href="{{ url('url') }}">url</a> <a href="{{ action('StudentControll ...

  5. spring boot -- 无法读取html文件,碰到的坑

    碰到的坑,无法Controller读取html文件 1. Controller类一定要使用@Controller注解,不要用@RestController 2. resource目录下创建templa ...

  6. Linux主机被SSH精神病(Psychos)暴力攻破后成为肉鸡的攻防过程

    近日公司局域网突然变得非常慢,上网受到很大影响,不仅仅是访问互联网慢,就连访问公司内部服务器都感到异常缓慢.于是对本局域网网关进行测试:   $ ping 10.10.26.254   发现延时很大, ...

  7. [Bzoj3676][Apio2014]回文串(后缀自动机)(parent树)(倍增)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 3396  Solved: 1568[Submit][Statu ...

  8. delphi函数大全

    delphi函数大全Abort                 函数    引起放弃的意外处理Abs                   函数    绝对值函数AddExitProc          ...

  9. setImageEdgeInsets 和 setImage配合使用达到button区域大并可调节其上图片显示区域大小的效果

    [self.indicator setImage:[UIImage imageNamed:@"01_login_moreicon@2x.png"] forState:UIContr ...

  10. iOS开发-用keychain替代UDID

    从2013-5-1日开始苹果就禁止对UUID的应用的通过了.所以我们需要用一些办法替换,下面我就是用keychain的访问替换掉UUID的. 那么,关于Keychain的应用,Apple提供了一个叫G ...