一,題目描述
給定一個十進制數M,以及需要轉換的進制數N。將十進制數M轉化爲N進制數
輸入描述:
輸入爲一行,M(32位整數)、N(2 ≤ N ≤ 16),以空格隔開。
輸出描述:
爲每個測試實例輸出轉換後的數,每個輸出佔一行。如果N大於9,則對應的數字規則參考16進制(比如,10用A表示,等等)
示例1
輸入
7 2
輸出
111
二,程序分析
看到此題,如果對進制不太清楚的話,我們肯定一般不會有什麼想法,但是,大家可以看一下我的思路,應該很快就能看懂。
1,首先,我們創建兩個字符串,一個是保留計算結果的,一個是存入最高的進位制0-F;
2,然後,在添加兩個整數m,n,一個是輸入值,一個是進位制。
3 , 其次,我們先判斷m爲大於0的數值,如果不是,將負數轉化爲正數,然後,我們將【m%n】的值作爲進制數存入的第一個字符串中。再將【 m/n】
的結果作爲下一次【m%n】的m值。進行計算。
4,最後,因爲開始的時候數是負數,我們將他變成正數進行計算,所以添加負號 “-” ,來表示之前的數進位制。
三,程序代碼
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//首先,創建兩個字符串,一個保留進位制,一個爲最高16進制的位數0-F
string str, table = "0123456789ABCDEF";
int m, n;
cin >> m >> n;
bool falg = false;
//當m爲負數時,先將他變成正數
if (m < 0)
{
m = 0 - m;
falg = true;
}
//將m的數值通過模取餘數的方法放到str字符串中
while (m)
{
str += table[m%n];
//再通過除法,取出商,然後循環
m /= n;
}
if (falg)
str += '-';
//因爲這裏算出來的是正序的,但是我們需要的是反序的數字串,在通過反序的方法進行打印
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
四,運行過程