问题描述:用十进制计算30的阶乘,然后把结果转换成三进制表示,那么该进制表示的结果末尾会有多少个连续0?
解析:作为笔试题的话,要想按照题意先把阶乘结果计算出来再转换成三进制最后再数0的个数,时间肯定来不及。也就是说,应该是有更简单的方法。以我们最熟悉的十进制为例,一个数乘以10相当于左移1位而右边补0;
了解二进制计算的朋友们应该知道,对一个二进制数乘以2相当于左移1位而右边补0。恭喜,这对于任意素数进制都是成立的。也就是说,把从1到30的整数简单因数分解一下,看看有多少个3,那么题目中最终计算结果末尾就有多少个0。
1.(python实现)下面的代码有4个函数,其中第二个函数调用了第一个函数,使用的是传统笨办法;第四个函数调用了第三个函数,使用的上面描述中的第二个方法。

  1. from functools import reduce
  2. from operator import mul
  3. from random import randrange, choice
  4.  
  5. def int2base(n, base):
  6. '''把十进制整数n转换成base进制'''
  7. result = []
  8. div = n
  9. #除基取余,逆序排列
  10. while div != 0:
  11. div, mod = divmod(div, base)
  12. result.append(mod)
  13. result.reverse()
  14. result = ''.join(map(str, result))
  15. #变成数字,返回
  16. return eval(result)
  17.  
  18. def zeros1(n, base):
  19. '''n!转换成base进制后,最后有多少个连续0'''
  20. #计算n!,并转换成base进制
  21. fac_n = str(int2base(reduce(mul, range(1, n+1), 1), base))
  22. #从后往前遍历,查找第一个不是0的位置
  23. length = len(fac_n)
  24. for i in range(length-1, -1, -1):
  25. if fac_n[i] != '':
  26. return length-i-1
  27.  
  28. def bases(n, base):
  29. '''计算n分解因数后有几个base相乘'''
  30. num = 0
  31. while n%base == 0:
  32. num += 1
  33. n = n // base
  34. return num
  35.  
  36. def zeros2(n, base):
  37. '''从1到n的整数中,所有数字因数分解后共有多少个base,n!转换成base进制后最后就有多少个连续0'''
  38. return sum(bases(i, base) for i in range(1, n+1) if i%base == 0)

2.java实现第二种方法(第一种方法java实现估计代码太过累赘)

  1. public class test {
  2.  
  3. public static void main(String[] args) {
  4. System.out.println(zero2(30,3));
  5. }
  6.  
  7. public static int bases(int n,int base){
  8. int num = 0;
  9. while(n % base == 0){
  10. num += 1;
  11. n = n / base;
  12. }
  13. return num;
  14. }
  15.  
  16. public static int zero2(int n,int base){
  17. int num = 0;
  18. for(int i=1 ; i < n+1 ; i++){
  19. if(i % base == 0){
  20. num += bases(i,base);
  21. }
  22. }
  23. return num;
  24. }
  25. }

参考资料:微信号 Python_xiaowu

Python求解进制问题(阿里巴巴2015笔试题)的更多相关文章

  1. python 实现进制转换(二进制转十进制)

    摘自https://baike.baidu.com/item/%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6 pytho ...

  2. python任意进制转换

    python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...

  3. python实现进制转换(二、八、十六进制;十进制)

    python实现进制转换(二.八.十六进制:十进制) (一)十进制整数转为二.八.十六进制 1.format实现转换>>> format(2,"b") # (10 ...

  4. Python中进制转换函数的使用

    Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...

  5. Python 各进制间的转换(转)

    转载自:http://blog.chinaunix.net/uid-21516619-id-1824975.html python 2.6以后内置函数#10进制转为2进制>>> bi ...

  6. Python 各种进制转换

    #coding=gbk var=input("请输入十六进制数:") b=bin(int(var,16)) print(b[2:]) 详细请参考python自带int函数.bin函 ...

  7. python实现进制之间的转换

    十进制转36进制: #36位映射模板 loop = '0123456789abcdefghijklmnopqrstuvwxyz' # 测试用例输入 n = a = [] : a.append( loo ...

  8. Python 16进制与字符串的转换

    电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...

  9. python之进制转换

    Python中二进制是以0b开头的:    例如: 0b11 则表示十进制的3 8进制是以0开头的:    例如: 011则表示十进制的9 16进制是以0x开头的:    例如: 0x11则表示十进制 ...

随机推荐

  1. LPC1768的iic通讯

    LPC1768有三路IIC,其中IIC0支持高速模式和plus模式,另外两路是普通IIC,使用IIC的过程如下 首先依然是打开IIC时钟,同时打开GPIO时钟 然后配置引脚为IIC功能 另外,因为ii ...

  2. 【转】amCharts,一款值得推荐的Flash charts图组件

    今天无意中看到一个利用Flash生成chart图的工具:amCharts,我一开始就觉得这些chart图非常眼熟,它的显示样式跟监控宝的是完全一样的,我通过查看网页的源文件,才知道原来监控宝就是用的这 ...

  3. css(四)-- 盒子模型和定位

    盒子模型: 盒子模型就是把一个html边框比作成了一个盒子的边框,盒子模型要做用于操作数据与边框之间的距离或者 是边框与边框之间的距离. 盒子模型主要是用于操作内边距(padding)与外边距(mar ...

  4. 设置ubuntu下使用ls命令显示文件颜色显示

    文件颜色属性: # Attribute codes: 字符属性# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed#00无 ...

  5. Django form模块使用心得

    最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...

  6. UVa 11172 - Relational Operator

    题目大意:给两个数,比较大小... #include <cstdio> int main() { int T; scanf("%d", &T); int a, ...

  7. Ubuntu各个版本支持时间

    早期版本:

  8. permutation test

  9. 使用(Drawable)资源——图片资源

    图片资源是最简单的Drawable资源,只要把*.png.*.jpg.*.gif等格式的图片放入/res/drawble-xxx目录下,Android SDK就会在编译应用中自动加载该图片,并在R资源 ...

  10. js判断ip地址,子网掩码,网关的逻辑性检查

    因为要做静态地址配置的js校验,找了好多资料发现网上都是关于ip,mask的有效性检查,没有ip,submask,gateway的逻辑性判断,自己写下代码供需要的人参考. 普及下网关地址知识: 就是进 ...