• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0

            轉自:http://www.cnblogs.com/pkuoliver/archive/2010/10/27/Convert-m-number-to-n-number.html

            園子里有很多深藏不漏的高手,在這里聊這種基本問題是有點小兒科。不過本人只是想分享下自己的新的,代碼,算法有不足之處,還請大家指正,共同進步。

             

            這種題也是一道經典的面試題,主要考察進制轉換細想,Coding質量等。

            當我們把十進制轉成二進制的時候,我們通過輾轉相除,取余,逆置余數序列的過程得到新的進制的數。因此我們可以借助這種思想把M進制轉成N進制的數。

            如下是C的詳細的實現方法

             

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            void m2n(int m, char* mNum, int n, char* nNum) 
            {
                int i = 0;
                char c, *p = nNum;
              
                //這是一個考察地方,是否能用最少乘法次數。
                while (*mNum != '\0')
                    i = i*m + *mNum++ - '0';
                  
                //輾轉取余
                while (i) {
                    *p++ = i % n + '0';
                    i /= n;
                }
                *p-- = '\0';
              
                //逆置余數序列
                while (p > nNum) {
                    c = *p;
                    *p-- = *nNum;
                    *nNum++ = c;
                }
            }

            觀察上面的代碼,存在著眾多的不足。例如,要對輸入參數做檢查,數值的大小收到int值最大值的限制等。不過好在一點,該算法的時間復雜度是O(n)的。

             

            我們霹靂無敵的趙大叔又提供了一種用Java實現的通用的進制轉換方法,即使Windows的計算器也轉不了的大數,這個算法也可以轉。算和上面的算法相比,他的基本思想不變,還是輾轉除,但是用了字符串做大數相除,很不錯的創新點,贊一個。代碼如下:

             

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            package test;
              
            /**
             * 功能:將一個數從M進制轉換成N進制
             * MValue:M進制數的字符串表示方法
             * Shang:保存中間運算結果
             * M:M進制
             * N:N進制
             */
            public class M2N {
                // 在這里對輸入賦值
                public static String MValue = "1231412423534674574757";
                public static String Shang = null;
                public static int M = 10;
                public static int N = 8;
              
                public static void main(String[] args) {
                    String nValue = "";
                    Shang = MValue;
                    while(Shang.length() > 0) {
                        nValue = qiuyu(Shang) + nValue;
                    }
                    System.out.println(nValue);
                }
              
                /**
                 * 功能:對給定的M進制字符串對n求余。
                 
                 * @param MTempValue
                 * @param m
                 * @param n
                 * @return
                 */
                public static String qiuyu(String MTempValue) {
                    Shang = "";
                    int temp = 0;
                    while (MTempValue.length() > 0) {
                        int t = getIntFromStr(MTempValue.substring(0, 1));
                        MTempValue = MTempValue.substring(1);
                        temp = temp * M + t;
                        Shang += getStrFromInt(temp / N);
                        temp = temp % N;
                    }
                    while(Shang.length() > 0 && Shang.charAt(0) == '0'){
                        Shang = Shang.substring(1);
                    }
                    return getStrFromInt(temp);
                }
              
                public static int getIntFromStr(String str){
                    return str.charAt(0) <= '9' && str.charAt(0) >= '0'
                        str.charAt(0) - '0' : str.charAt(0) - 'a' + 10;
                }
              
                public static String getStrFromInt(int value){
                    String result = null;
                    if(value>=0 && value<=9)
                        result = String.valueOf((char)('0' + value));
                    else if(vlaue > 9 && value <36)
                    {
                        result = String.valueOf((char)('a' + value - 10));
                    }
                    else
                    {
                        result = "-1";// 出錯誤了
                    }
                    return result;
                }
            }

            趙大叔的算法好了不少,除了參數檢查,大小寫之外都很好。值得我們借鑒。 

            国内精品伊人久久久久影院对白 | 色诱久久久久综合网ywww| 久久精品国产男包| 国产精品久久国产精品99盘| 潮喷大喷水系列无码久久精品| 久久免费视频网站| 狠狠色婷婷久久综合频道日韩| …久久精品99久久香蕉国产| 久久久久久亚洲精品无码| 久久99精品国产麻豆宅宅| 久久精品成人免费看| 一本综合久久国产二区| 精品久久久久久久| 久久久久久久波多野结衣高潮| 日本福利片国产午夜久久| 久久久久久综合网天天| 久久久久成人精品无码| 久久久老熟女一区二区三区| 亚洲?V乱码久久精品蜜桃 | 国产真实乱对白精彩久久| 亚洲综合日韩久久成人AV| 久久国产精品偷99| 66精品综合久久久久久久| 亚洲中文字幕无码久久综合网| 久久婷婷人人澡人人| 国产女人aaa级久久久级| 久久久久久a亚洲欧洲aⅴ | 久久WWW免费人成一看片| 亚洲综合久久久| 性高湖久久久久久久久AAAAA| 国内精品久久久久久久亚洲| 国产欧美一区二区久久| 精品久久久无码人妻中文字幕豆芽 | 久久久久国产日韩精品网站| 日本久久久精品中文字幕| 国内精品久久人妻互换| 久久av无码专区亚洲av桃花岛| 久久精品亚洲AV久久久无码| 久久只有这精品99| 久久无码AV中文出轨人妻| 99久久无色码中文字幕人妻|