• <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

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

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

             

            這種題也是一道經(jīng)典的面試題,主要考察進(jìn)制轉(zhuǎn)換細(xì)想,Coding質(zhì)量等。

            當(dāng)我們把十進(jìn)制轉(zhuǎn)成二進(jìn)制的時候,我們通過輾轉(zhuǎn)相除,取余,逆置余數(shù)序列的過程得到新的進(jìn)制的數(shù)。因此我們可以借助這種思想把M進(jìn)制轉(zhuǎn)成N進(jìn)制的數(shù)。

            如下是C的詳細(xì)的實現(xiàn)方法

             

            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;
              
                //這是一個考察地方,是否能用最少乘法次數(shù)。
                while (*mNum != '\0')
                    i = i*m + *mNum++ - '0';
                  
                //輾轉(zhuǎn)取余
                while (i) {
                    *p++ = i % n + '0';
                    i /= n;
                }
                *p-- = '\0';
              
                //逆置余數(shù)序列
                while (p > nNum) {
                    c = *p;
                    *p-- = *nNum;
                    *nNum++ = c;
                }
            }

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

             

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

             

            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;
              
            /**
             * 功能:將一個數(shù)從M進(jìn)制轉(zhuǎn)換成N進(jìn)制
             * MValue:M進(jìn)制數(shù)的字符串表示方法
             * Shang:保存中間運算結(jié)果
             * M:M進(jìn)制
             * N:N進(jì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進(jìn)制字符串對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;
                }
            }

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

            91久久香蕉国产熟女线看| 精品无码久久久久久国产| 久久久久久夜精品精品免费啦| 精品久久8x国产免费观看| 久久国产乱子精品免费女| 久久中文字幕视频、最近更新| 久久国产劲爆AV内射—百度| 久久国产精品99久久久久久老狼| 午夜精品久久久久成人| 国产精品免费看久久久| 热久久视久久精品18| 久久国产乱子伦精品免费强| 久久久SS麻豆欧美国产日韩| 91秦先生久久久久久久| 久久w5ww成w人免费| 久久久久久久免费视频| 国产午夜电影久久| 国产人久久人人人人爽| 国产成人综合久久精品红| 国产成人99久久亚洲综合精品| 亚洲国产精品无码久久一线| 久久国产成人| 国产精品青草久久久久福利99| 色综合久久久久久久久五月| 久久亚洲国产最新网站| 久久人人超碰精品CAOPOREN| 日本精品久久久中文字幕| 亚洲日韩中文无码久久| 综合久久精品色| 亚洲欧美日韩久久精品| 久久综合成人网| 青青久久精品国产免费看| 精品久久久久久国产三级| 国产午夜精品久久久久九九电影 | 2021少妇久久久久久久久久| 久久久这里只有精品加勒比| 中文字幕无码久久久| 精产国品久久一二三产区区别| 久久笫一福利免费导航| 久久久久青草线蕉综合超碰 | 亚洲狠狠久久综合一区77777|