进制转换

进制转换

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int Atoi( string str , int N ){      //N进制转10进制,输入string 输出int
	int ans = 0;
	for( int i = 0 ; i < str.size() ; i++){
		if(str[i] >= '0' && str[i] <= '9')
			ans = ans * N + str[i] - '0';
		else
			ans = ans * N + str[i] - 'A' + 10;
	}
	return ans;
}

string Itoa( int num , int M ){   //10进制转M进制, 输入int ,输出string
	string ans = "";
	do{
		int t = num % M;
		if( t >= 0 && t <= 9 )
			ans += t + '0';
		else
			ans += t - 10 + 'A';
		num /= M;	
	}while( num != 0 );
	reverse( ans.begin() , ans.end() );
	return ans;
}

int main(){
	int n , m;
	string s1;
	cin >> n >> s1 >> m;
	int num1;
	num1 = Atoi( s1 , n );   // 先把n进制转10进制
	string s2;
	s2 = Itoa( num1 , m );  //再将10进制转m进制 
	cout << s2 << endl; 
	return 0;
}

负数进制的进制转换

解题思路:

和正数差不多,但要注意将余数为负数的转化为正数,做法就是给商+1,余数-m (m为进制数,也就是除数),就是将原本的余数再拿出一部分

AC代码:

#include<bits/stdc++.h>
using namespace std;
string Itoa( int num , int m ){
	string str = "";
	do{
		int t = num % m;
		num /= m;
		if( t < 0 ){
			t -= m;      
			num += 1;     //除数+1,余数-m 
		}
		if( t >= 0 && t <= 9 )
			str += t + '0';
		else
			str += t - 10 + 'A'; 
	}while(num != 0);
	reverse( str.begin() , str.end() );
	return str;
}
int main(){
	int n,m;
	cin >> n >> m;
	string s1;
	s1 = Itoa( n , m );
	cout << n << "=" << s1 << "(base" << m << ")" << endl;
	return 0;
}
原文地址:https://www.cnblogs.com/w-w-t/p/13159068.html