• 有趣的题


    1、100!有多少位

    要计算 n! 的位数,很容易嘛:
    X = log10(n!) = log10(1)+log10(2)+log10(3)+……+log10(n-1)+log10(n);
    然后对X取整,再加1,n!的位数了!

    计算得到:
    100 阶乘位数是      :158
    100!= 93326215443944152681699238856266700490715968264381621468592963895217599993229915
    608941463976156518286253697920827223758251185210916864000000000000000000000000

    有公式  n! = sqrt(2*pi*n) * (n/e)^n

    最后又几个0? 24个  主要看有几个5,因为2肯定比5多  

    2、 n&(n-1)   n&(-n)

    n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:
    n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000
    可以看到原本最低位为1的那位变为0。
    弄明白了n&(n-1)的作用,那它有哪些应用?
    1. 求某一个数的二进制表示中1的个数
    while (n >0 ) {
          count ++;
          n &= (n-1);
    }


    2. 判断一个数是否是2的方幂
    n > 0 && ((n & (n - 1)) == 0 )

    3. 计算N!的质因数2的个数。
    容易得出N!质因数2的个数 = [N / 2] + [N / 4] + [N / 8] + ....
    下面通过一个简单的例子来推导一下过程:N = 10101(二进制表示)
    现在我们跟踪最高位的1,不考虑其他位假定为0,
    则在
    [N / 2]    01000
    [N / 4]    00100
    [N / 8]    00010
    [N / 8]    00001
    则所有相加等于01111 = 10000 - 1
    由此推及其他位可得:(10101)!的质因数2的个数为10000 - 1 + 00100 - 1 + 00001 - 1 = 10101 - 3(二进制表示中1的个数)

    推及一般N!的质因数2的个数为N - (N二进制表示中1的个数)

    n&(-n)在树状数组中lowbit出现   用来求 t 中的因子中形如2^k的数为多少     用来取得n最右边的1,可以知道其因子中有几个2

    10:  0000 1010

    -10: 1111 0110

    10&(-10)为 0010  =  2  所以10的因子中为2的有一个,2^k的形式的为2^1

    8&(-8) = [1000] = 8   所以8的因子中为2的有3个,2^k的形式为2^3

    输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32,  321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。

    首先因为数组可能非常长,所以要定义一个整数类,使得其大小可以容纳所有的数组元素组成的数不大现实。因此我们直接输出这个数组,让其看起来像一个整数,这样我们就可以把问题转化为:如何给这个数组排序,使其看做一个数字的时候最小。

    第一个想到的可能是按字典序排序,小的在前面。可惜这个是不可行的,比如32的字典序比322小,但是32322比32232大,

    所以在这里自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,所以按这个规则,s2就应该排在s1前面。

    如果用char *表示字符串,那就可以使用qsort函数进行排序了。

  • 相关阅读:
    Hibernate配置文件详解
    Struts工作原理、流程
    java三大框架原理
    JAVA三大框架的各自作用
    tomcat的种种
    jdk及tomcat的配置
    java-io-file
    JAVA-IO-文件过滤
    SPSS-单因素方差分析(ANOVA) 案例解析(转)
    SPSS-比较均值-独立样本T检验 案例解析(转)
  • 原文地址:https://www.cnblogs.com/juandx/p/4057176.html
Copyright © 2020-2023  润新知