3552: 最右非零的数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 89  Solved: 27
[Submit][Status][Discuss]

Description

       给出正整数N(可能有前导0),请求出N!最右非零的数位的值。

Input

       第一行一个数T表示数据组数
       下接T行每行一个数N表示一组数据

Output

       对于每组数据,输出一行一个数表示这组数据的答案

Sample Input

2
5
4

Sample Output

2
4

思路与公式:

1:n!的尾部的"0"全部来自因子5和因子2(一对5和2产生一个0),如果把这些因子去掉,则可符合要求(2的个数

明显多于5的个数)

2:设F(n)为答案所要求的数,G(n)为1,2…n中将5的倍数的数换成1后的各项乘积,G(15)=1*2*3*4*1*6*7*8*9*

1*11*12*13*14*1(G(n)%10必不为0),则可推出以下两个公式

① n! = (n/5)! * 5^(n/5) * G(n)  ② F(n!) = F((n/5)!) * F[5^(n/5) * G(n)] (可以递归)

3:根据②可知F[5^(n/5) * G(n)] = F[G(n)/(2^(n/5))],其中G(n)/(2^(n/5))可找到规律

4:枚举可找到上述规律为Mp[20] = {1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2}(20一循环)这样就可以算出答案啦

PS:

n<=19  ----  G[n] = data[n]

n>=20  ----  G[n] = data[n%20]

n过大,这里用字符串处理

#include<stdio.h>
#include<string.h>
char str[10005];
int a[10005], Mp[20] = {1,1,2,6,4,2,2,4,2,8,4,4,8,4,6,8,8,6,8,2};  /*这个是F[5^(n/5)*G(n)]的前20(0-19)项,后面循环*/
int main(void)
{int T, len, ret, i, c;scanf("%d", &T);while(T--){scanf("%s", str);len = strlen(str);for(i=len-1;i>=0;i--)a[len-1-i] = str[i]-'0';     /*将n的每一位存入数组a[],其中a[0]是最低位,a[len-1]是最高位*/ret = 1;while(len!=0)  /*用循环代替递归*/{c = 0;ret = ret*Mp[a[1]%2*10+a[0]]%10;   /*"a[1]%2*10+a[0]"是计算n%20的值*/for(i=len-1;i>=0;i--){c = c*10+a[i];    /*计算n除以5之后的值,并将其存入(覆盖)a[]*/a[i] = c/5;c %= 5;}if(a[len-1]==0)     /*如果最高位是0,去掉最高位*/len--;}if(strcmp(str, "1")==0 || strcmp(str, "0")==0)printf("1\n");elseprintf("%d\n", ret);}return 0;
}

bzoj 3552: 最右非零的数 hduoj 1066: Last non-zero Digit in N!(求N!的最后一个非0位)相关推荐

  1. 可逆矩阵的秩等于矩阵的阶数_为什么矩阵的秩等于其行阶梯行矩阵非零行的行数?详细一点哈?谢了。...

    行阶梯矩阵非零行的首非零元(个数=非零行数)所在的列是线性无关的, 且其余向量可由它们线性表示. 所以它们是A的列向量组的一个极大无关组. 所以A的列秩 = 非零行的行数 所以A的秩 = 非零行的行数 ...

  2. csp真题 202109-2非零段划分C++代码(100分)

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 样例1输入 11 3 1 2 0 0 2 0 4 5 0 2 样例1输出 5 样例1解释 p=2 ...

  3. CCF202109-2 非零段划分(100分)【序列处理】

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...

  4. CSP 202109-2 非零段划分

    题目链接:非零段划分 题目描述 A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组.我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足: 1≤i≤j≤n: 对于任意的整 ...

  5. C语言习题:/*键盘输入两个非零整数A和B,如果A和B都是偶数则输出两个数的和,如果A和B都是奇数则输出两个数的差,如果A是奇数B是偶数则输出两数积,如果A是偶数B是奇数输出AVB结果*/

    #include<stdio.h> /*键盘输入两个非零整数A和B,如果A和B都是偶数则输出两个数的和, 如果A和B都是奇数则输出两个数的差, 如果A是奇数B是偶数则输出两数积, 如果A是 ...

  6. postgre非零相除等于0_LeetCode刷题实战29:两数相除

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)

    BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Description 正如你所知 ...

  8. Pinterest 谈实战经验:如何在两年内实现零到数百亿的月访问

    Pinterest 谈实战经验:如何在两年内实现零到数百亿的月访问 发表于2013-04-17 17:20| 5639次阅读| 来源High Scalability| 46 条评论| 作者Todd H ...

  9. 【组合数学】非降路径问题 ( 限制条件的非降路径数 )

    文章目录 一.限制条件的非降路径数 一.限制条件的非降路径数 从 (0,0)(0,0)(0,0) 到 (n,n)(n,n)(n,n) 除端点外 , 不接触对角线的非降路径数 ? 此时无法使用基本公式进 ...

最新文章

  1. 由parseInt 引发的问题---想到浮点运算精度丢失---看透js number 的 encoded
  2. Java 反射 (Class、ClassLoader、Constructor、Method、Field)
  3. mysql if begin end_MySQL存储过程例子,不能在if else里面用begin end否则会报错Erro_MySQL...
  4. Fragment向ChildFragment传值
  5. python selenium_Python+selenium自动化测试
  6. Android之自定义控件入门
  7. JAVA怎么实现网页退出系统_java后台实现js关闭本页面,父页面指定跳转或刷新操作...
  8. day-01(html)
  9. linux中swi指令,Linux系统调用、新增系统调用方法
  10. 二叉树的创建_【数据结构用python描述】python创建二叉树
  11. linux mbr 转 gpt 数据丢吗,[如何]将磁盘从MBR转换为GPT,而不丢失数据 | MOS86
  12. IDEA+Gradle搭建Spring Boot项目
  13. linux 服务器访问限制,Linux中限制用户访问权限的3种方法
  14. 常用的UML建模详解
  15. wireshark Fiddler抓包分析与解密https Fiddler修改https请求和响应
  16. Netapp常用命令
  17. linux 拼图游戏,王牌拼图红包版
  18. 最简单DIY基于STM32的远程控制电脑系统②(无线遥杆+按键控制)
  19. Python 图片批量处理(图片批量rename,图片批量resize,图片批量split,图片批量concat)
  20. Ubuntu安装图形界面(桌面)

热门文章

  1. python简单代码-Python简单进程锁代码实例
  2. 云原生游戏《云联物语》揭开神秘面纱 云鹭科技温向东带你深度了解云原生游戏领域...
  3. 【百度贾磊】汉语语音识别技术重大突破:LSTM+CTC详解(22PPT)
  4. 哈弗F7x驾舱数字化测试 语音识别精准
  5. python的最大优势之一是有理数吗_Python里的有理数类(精度高,可计算)
  6. koa操作mongodb,封装mongdb操作方法
  7. Promise的简单使用例子
  8. 【MYSQL笔记】使用存储过程
  9. H.264官方软件JM源代码简单分析-解码器ldecod
  10. matlab二元一次方程求解_方程的计算机处理913_Matlab