天天看點

【進制轉換】給定一個十進制數M,以及需要轉換的進制數N。将十進制數M轉化為N進制數

歡迎觀看我的部落格,如有問題交流,歡迎評論區留言,一定盡快回複!(大家可以去看我的專欄,是所有文章的目錄)

文章字型風格:

紅色文字表示:重難點

藍色文字表示:思路以及想法

【進制轉換】給定一個十進制數M,以及需要轉換的進制數N。将十進制數M轉化為N進制數

原題連結

思路:

  1. 我們把一個數轉成另一個進制的數,指定是先從小位開始轉換,就比如7 轉成 2,一定是先用 7 % 2 = 1得到的1,這個1是二進制中的最小位數。一定不是先用 7 % 6 = 1得到二進制的最大位數!是以我們得到,不能先輸出 7 % 2的結果,而是把這個過程都依次存入到數組中
  2. 存到數組中,會有兩種方法,第一個就是 7 % 2的結果,存放到數組的第一個位置,依次類推,最後記錄到最後存放的位置,然後倒叙輸出。
  3. 另一種方法就是 String s = 7 % 2 + s(7%2隻代表依次處理)這個處理方法,就會把 最後處理的結果,放到數組的首位!
  4. 注意,7%2得到的是1,但是其他進制,進行處理的時候,可能得到11,那麼對應的就是字母 B。并且呢其實,上述的 7 % 2 + s也是有錯誤的,因為7 % 2是整數。
  5. 那麼,如何把整數轉成字元呢,并且也就是 1對應char1,并且 11對應的是 B等等呢?
  6. 我們可以自定義一個數組,類似于String s = “0123456789ABCDEF”,我們隻需要s[7 % 2]就會得到相應的字元
#include<string>
#include <iostream>
using namespace std;
int main(){
    string s="",table="0123456789ABCDEF";//用一個字元串将結果儲存起來,也友善以後用下表引用
    int m,n;
    cin>>m>>n;
    if(m==0)
     cout<<m<<endl;
    while(m){
        if(m<0){
            m=-m;
            cout<<"-";
        }
        s=table[m%n]+s;//剛求得的結果在前,原來求得的結果在後,不用第三方儲存,直接達到目的,很贊
        m/=n;
    }
    cout<<s<<endl;
    return 0;
}
           

繼續閱讀