歡迎觀看我的部落格,如有問題交流,歡迎評論區留言,一定盡快回複!(大家可以去看我的專欄,是所有文章的目錄)
文章字型風格:
紅色文字表示:重難點
藍色文字表示:思路以及想法
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLmJmZyEmM0Q2N2cjMyMTOiFmZmRDN0QDO4QGNzIzYmF2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
原題連結
思路:
- 我們把一個數轉成另一個進制的數,指定是先從小位開始轉換,就比如7 轉成 2,一定是先用 7 % 2 = 1得到的1,這個1是二進制中的最小位數。一定不是先用 7 % 6 = 1得到二進制的最大位數!是以我們得到,不能先輸出 7 % 2的結果,而是把這個過程都依次存入到數組中
- 存到數組中,會有兩種方法,第一個就是 7 % 2的結果,存放到數組的第一個位置,依次類推,最後記錄到最後存放的位置,然後倒叙輸出。
- 另一種方法就是 String s = 7 % 2 + s(7%2隻代表依次處理)這個處理方法,就會把 最後處理的結果,放到數組的首位!
- 注意,7%2得到的是1,但是其他進制,進行處理的時候,可能得到11,那麼對應的就是字母 B。并且呢其實,上述的 7 % 2 + s也是有錯誤的,因為7 % 2是整數。
- 那麼,如何把整數轉成字元呢,并且也就是 1對應char1,并且 11對應的是 B等等呢?
- 我們可以自定義一個數組,類似于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;
}