阶乘
n的阶乘定义为n!=123*……*n 如3!=6 n!通常最后会有很多0,如5!=120 最后有一个0,现在统计n!去除末尾的0后,最后k位是多少
输入格式:
第一行包括两个数n,k
输出格式:
如果n!不止k位,则输出最后k位,如果不足k位,则将剩下的全部输出
7!为5040,去除末尾的0为504,最后两位为04 100%满足1< =n< =20 1< =k< =9
样例输入
7 2
样例输出
04

问题链接:JSK-217 阶乘
问题描述:(略)
问题分析
    阶乘计算会越算越大,然而只需要计算最后k<=9位就好办了,使用模除可以取出最后若干位来。
    需要分析一下,末尾的0是怎么来的。一般而言,有两种产生末尾0的原因:一是乘以末尾为0的数,即10的倍数的数;二是含有因子2的数与含有因子5的数的乘积(10=2*5)得到的,而含有因子2的数远多余含有5因子数。
    计算过程中,如果仅仅取最右边k位持续计算则会造成有效数字的丢失,所以先多取一些位进行计算。最后再用模除取出最后k位。
程序说明
    程序中,输出k位前置为0的数的做法略微与众不同,值得效仿。用循环处理来实现高位补0那是浮云。
参考链接:(略)
题记:格式字符串也是可以在程序中算出来的。

AC的C语言程序如下:

/* JSK-217 阶乘 */#include <stdio.h>typedef long long LL;#define BASE 10
#define MOD 1000000000000000LLint main(void)
{int n, k, i;LL mod, ans;scanf("%d%d", &n, &k);mod = 1;for(i = 1; i <= k; i++)mod *= BASE;ans = 1;for(i = 2; i <= n; i++) {if(i % BASE == 0)continue;ans *= i;while(ans % BASE == 0)ans /= BASE;ans %= MOD;}and %= mod;// 输出结果char fmt[10];sprintf(fmt, "%%0%dlld\n", k);printf(fmt, ans);return 0;
}

JSK-217 阶乘【大数】相关推荐

  1. C语言实现大数的阶乘(附完整源码)

    实现大数的阶乘 大数 _large_num结构体 实现了以下相关的几个接口 大数的阶乘完整源码(定义,实现,main函数测试) 大数 _large_num结构体 typedef struct _lar ...

  2. Ubuntu MySQL 亚马逊_亚马逊EC2 ubuntu下安装mysql远程无法连接问题o

    无法远程的原因有很多,我今天遇到的问题是通过navicat无法远程连接我在EC2上创建的实例. 1.通过命令" netstat -an|grep 3306 "检查一下3306端口对 ...

  3. #035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)

    实际题目 本题要求实现一个打印非负整数阶乘的函数. 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000.如果N是非负 ...

  4. NYOJ 28 大数阶乘

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

  5. 大数运算(7)——大数阶乘(求阶乘)

    对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大. 就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值.这时候,我们要通 ...

  6. 大数运算(6)——大数阶乘(求位数)

    对于求一个大数的阶乘的位数一般有两种方法: 第一种: lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1 =[lgN+lg(N-1)+lg(N-2)+......+lg ...

  7. 编程计算并输出1~50之间的所有数的阶乘(大数阶乘)

    如果使用普通的方法,当阶乘计算到13!时数据就开始出现问题,因为int型数据无法保存这么大的数字,即使换成long ,long long ,double等也无法容纳,所以我们需要使用大数的方法来完成这 ...

  8. 高精度加法(非负)和大数阶乘及和汽水问题

    高精度加法(非负)和大数阶乘 文章目录 高精度加法(非负)和大数阶乘 一.问题描述 二.代码 三.问题描述 四.代码 五.问题描述 六.代码 一.问题描述 二.代码 #define _CRT_SECU ...

  9. HDU 1042 N!(高精度阶乘、大数乘法)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  10. NYOJ 27 大数阶乘

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

最新文章

  1. 强哥PS强化培训班课程目录
  2. 石家庄的联通破网络,请大家鉴定
  3. android 图片圆角 遮罩_Android 自定义View练手Demo(一)实现圆角遮罩效果
  4. Ruby学习笔记_索引贴
  5. eclipse maven在哪里_Maven操作
  6. java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...
  7. redis中数据的持久化
  8. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
  9. 2020年施工晴雨表电子版_2020年建筑施工特种作业人员培训通知
  10. 《Python核心编程(第2版)》读书笔记(6)之用列表模拟堆栈(关键词:Python/列表/堆栈/stack.py)
  11. SNMP-简单网络管理协议
  12. 服务器2016系统看图软件,PhotoX:Mac上最好用的免费看图软件
  13. PG数据库创建视图并授权给新用户
  14. ArcGIS表转EXCEL超出上限转换失败
  15. 星球大战7:原力觉醒[Star Wars Episode VII:The Force Awakens]
  16. python开发跟淘宝有关联微_为什么微商和淘宝卖家不得不做公众号和小程序?
  17. 今天开通了CNSD博客
  18. 8*8点阵动态显示 I 爱 U
  19. 大学生一定要理解的十五件事!
  20. 大数据必知:Hadoop的三大组件和特点

热门文章

  1. 使用 jsfl 发布flash IDE 插件
  2. 定时器的实现原理 不消耗cpu_空闲CPU在做什么?
  3. Linux下redis基本安装配置(CentOS7)
  4. 泛型使用思想,记一次java泛型使用经历
  5. layui横向时间线_操盘线:线上阴线满仓,线下阳线清仓
  6. LeetCode34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
  7. LeetCode 44.通配符匹配(动态规划)
  8. 【muduo源码分析】TcpServer服务架构
  9. flamingo源码分析(1) :单例模式
  10. java8 meta区_JVM-Java8的MetaSpace