永遠不要去責怪你人生裏的任何人,
好的人給你快樂,壞的人給你經歷,
最差的人給你教訓,最好的人給你回憶。–徐崢
題目描述
進制轉換 | 時間限制:1秒 | 內存限制:32768K
給定一個十進制數M,以及需要轉換的進制數N。將十進制數M轉化爲N進制數
輸入描述
輸入爲一行,M(32位整數)、N(2 ≤ N ≤ 16),以空格隔開。
輸出描述
爲每個測試實例輸出轉換後的數,每個輸出佔一行。如果N大於9,則對應的數字規則參考16進制(比如,10 用A表示,等等)
示例1: 輸入 7 2 輸出 111
題目解析
本題題目很簡單,題目的本意就是將10進制的數轉換成N進制。N(2 ≤ N ≤ 16)可以看出進制最多可以到16進制。
解題思路
本題思路很簡單,首先想清楚原理:N進制數,每個進制位的值分別是X0* N^ 0,X1* N^ 1, X2* N^2…,X0, X1,X2就是這些進制位的值,就是就是進行取模餘數就是當前低進制的位的值是多少,通過除掉進制數,進入下一個進制位的計算。
解法一
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string s, table="0123456789ABCDEF";
int m,n;
cin>>m>>n;
bool flag = false;
// 如果是負數,則轉成正數,並標記一下
if(m < 0) {
m = 0 - m;
flag = true;
}
// 按進制換算成對應的字符添加到s
while(m){
s += table[m%n];
m /= n;
}
if(flag){
s += '-';
}
reverse(s.begin(), s.end());
cout<<s<<endl;
return 0;
}
/*
-75
6
m:-75 n:6
s: -203
99
6
m:99 n:6
s: 243
*/
解法二
#include <iostream>
#include <string>
using namespace std;
int main(){
string s = "", table = "0123456789ABCDEF";
int m, n;
cin >> m >> n;
cout << "m:" << m << " " << "n:" << n << endl;
while (m){
if (m<0){
m = -m;
cout << "-" << endl;
}
s += table[m%n];
m /= n;
}
reverse(s.begin(), s.end());
cout << "s: " << s << endl;
system("pause");
return 0;
}
/*
-75
6
m:-75 n:6
-
s: 203
*/