C/C++_2019_7_4(進制轉換)

永遠不要去責怪你人生裏的任何人,
好的人給你快樂,壞的人給你經歷,
最差的人給你教訓,最好的人給你回憶。–徐崢

題目描述
進制轉換 | 時間限制: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
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章