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
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章