<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走在架構(gòu)師的大道上 Jack.Wang's home

    Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
     階乘是個(gè)很有意思的東西,可能很多朋友看到關(guān)于他的計(jì)算就怕了,其實(shí)沒(méi)什么,看完下面兩個(gè)問(wèn)題您應(yīng)該有低了。

            1.       給定一個(gè) N ,求出N!末尾有多少個(gè)零,比如 N=10,N!=3628800,N!末尾有兩個(gè)零。
    2.       N!的二進(jìn)制表示中最低為1的位置,比如 11010010, 最低為1的位置為2。

    問(wèn)題一解法:

        在上一個(gè) blog 中介紹的子數(shù)組乘積最大值的問(wèn)題中,有朋友考慮到溢出的問(wèn)題,在這個(gè)問(wèn)題中,我們從那些數(shù)相乘能得到10這個(gè)命題開(kāi)始思考。比如N=K×10m那么N!后面就有m個(gè)零。這個(gè)問(wèn)題轉(zhuǎn)化為將N!進(jìn)行分解,如N=2a×3b×5c 很顯然 10=2×5,那么零的個(gè)數(shù)m=min(a,c), 一個(gè)數(shù)能夠被2整除的機(jī)率比5要大很多因此 m=c,因此轉(zhuǎn)化為求 c的問(wèn)題,具體算法如:

     1publicclass factorial {
     2

     3    privatestaticint zeroNum(int n) 
    {
     4

     5       int ret = 0
    ;
     6

     7       for (int i = 1; i <= n; i++
    {
     8

     9           int j =
     i;
    10

    11           while (j % 5 == 0
    {
    12

    13              ret++
    ;
    14

    15              j /= 5
    ;
    16

    17           }

    18
    19       }

    20
    21
           returnret;
    22

    23    }

    24
    25    privatestatic BigInteger fac(long n) 
    {
    26

    27       BigDecimal a = new BigDecimal(1
    );
    28

    29
           BigDecimal b;
    30

    31       for (long i = 1; i <= n; i++
    {
    32

    33           b = new
     BigDecimal(i);
    34

    35           a =
     a.multiply(b);
    36

    37       }

    38
    39       return
     a.toBigInteger();
    40

    41    }

    42

    問(wèn)題二解法:

    我們都知道一個(gè)數(shù)除以2可以表示為 N>>1,即向右移動(dòng)一位。這個(gè)問(wèn)題轉(zhuǎn)化為求 N! 含有2的質(zhì)因數(shù)的個(gè)數(shù)問(wèn)題。

     1    staticclass PrimeFactor {
     2

     3       publicstaticint primeFactor(int n) 
    {
     4

     5           int ret = 0
    ;
     6

     7           while (n != 0
    {
     8

     9              n >>= 1
    ;
    10

    11              ret +=
     n;
    12

    13           }

    14
    15           return ret + 1
    ;
    16

    17       }

    18
    19       publicstatic String binaryString(int n) 
    {
    20

    21           return
     Integer.toBinaryString(fac(n).intValue());
    22

    23       }

    24
    25    }

    26

    完整程序:

      1package org.blogjava.arithmetic;
      2

      3import
     java.math.BigDecimal;
      4

      5import
     java.math.BigInteger;
      6

      7
    /**
      8
      9 * @author
     Jack.Wang
     10

     11 * @see http://jack2007.blogjava.net/

     12
     13 */

     14
     15public class factorial 
    {
     16

     17       private static int zeroNum(int n) 
    {
     18

     19              int ret = 0
    ;
     20

     21              for (int i = 1; i <= n; i++
    {
     22

     23                     int j =
     i;
     24

     25                     while (j % 5 == 0
    {
     26

     27                            ret++
    ;
     28

     29                            j /= 5
    ;
     30

     31                     }

     32
     33              }

     34
     35              return
     ret;
     36

     37       }

     38
     39       private static BigInteger fac(long n) 
    {
     40

     41              BigDecimal a = new BigDecimal(1
    );
     42

     43
                  BigDecimal b;
     44

     45              for (long i = 1; i <= n; i++
    {
     46

     47                     b = new
     BigDecimal(i);
     48

     49                     a =
     a.multiply(b);
     50

     51              }

     52
     53              return
     a.toBigInteger();
     54

     55       }

     56
     57       static class PrimeFactor 
    {
     58

     59              public static int primeFactor(int n) 
    {
     60

     61                     int ret = 0
    ;
     62

     63                     while (n != 0
    {
     64

     65                            n >>= 1
    ;
     66

     67                            ret +=
     n;
     68

     69                     }

     70
     71                     return ret + 1
    ;
     72

     73              }

     74
     75              public static String binaryString(int n) 
    {
     76

     77                     return
     Integer.toBinaryString(fac(n).intValue());
     78

     79              }

     80
     81       }

     82
     83       public static void main(String[] args) 
    {
     84

     85              System.out.println("12!為" + fac(12+ ",后面零的個(gè)數(shù)為" + zeroNum(12
    ));
     86

     87              System.out.println("12!的二進(jìn)制為" + PrimeFactor.binaryString(12+ ",1的位置"

     88
     89                            + PrimeFactor.primeFactor(12
    ));
     90

     91       }

     92
     93       
    /**
     94
     95
            out: 
     96

     97
            12!為479001600,后面零的個(gè)數(shù)為2
     98

     99
            12!的二進(jìn)制為11100100011001111110000000000,1的位置11
    100

    101        */

    102
    103}

    104




    本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。
    posted on 2008-10-18 12:05 Jack.Wang 閱讀(4301) 評(píng)論(1)  編輯  收藏 所屬分類: 數(shù)學(xué)&算法

    Feedback

    # re: 微軟面試題---階乘問(wèn)題 2008-10-22 17:01 icalm
    private static int zeroNum(int n){
    int ret = 0;

    while(n >= 5){
    ret += n/5;
    n = n / 5;
    }
    return ret;
    }  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 国产精品日本亚洲777| 亚洲精品无码久久久久YW| 丰满妇女做a级毛片免费观看| 成年网站免费视频A在线双飞| 亚洲美女视频网站| 午夜影院免费观看| 亚洲综合无码一区二区三区| 免费观看激色视频网站bd| 亚洲国产片在线观看| 成人毛片18岁女人毛片免费看| 中国亚洲呦女专区| 国产精品免费看久久久久| 日韩大片免费观看视频播放| 国产精品亚洲视频| 国产无遮挡无码视频免费软件 | 成人黄动漫画免费网站视频| 亚洲精品无码aⅴ中文字幕蜜桃| 国产在线98福利播放视频免费| 四虎精品成人免费视频| 亚洲色精品88色婷婷七月丁香 | 大片免费观看92在线视频线视频| 精品亚洲一区二区三区在线播放| 中文在线免费看视频| 亚洲综合一区二区| 在线播放免费播放av片| 一级毛片在线免费播放| 亚洲av之男人的天堂网站| 1000部夫妻午夜免费| 亚洲AV无码专区在线电影成人| 亚洲欧洲一区二区三区| 精品熟女少妇av免费久久| 2020久久精品亚洲热综合一本| jizzjizz亚洲| 91福利视频免费| 国产亚洲蜜芽精品久久| 亚洲天堂男人天堂| 免费国产小视频在线观看| 日本视频免费高清一本18 | 免费看一级高潮毛片| 亚洲日本一区二区| 国产一区二区三区在线免费观看 |