进制转换

二进制转十进制

#include <iostream>  
using namespace std;  
int main()  
{  
    int a[10], n, i;    
    cout<<"Enter the number to convert: ";    
    cin>>n;    
    for(i=0; n>0; i++)    
    {    
        a[i]=n%2;    
        n= n/2;  
    }    
    cout<<"Binary of the given number= ";    
    for(i=i-1 ;i>=0 ;i--)    
    {    
        cout<<a[i];    
    }
    return 0;
}

十进制转二进制

不考虑算法实现,我们的思路是什么?
除二倒序取余

算法想实现倒序,那么就可以用栈

stack<int> dec2bin(int num) {
	stack<int> bin;
	while (num != 0) {
		bin.push(num % 2);
		// 取余并压栈
		num /= 2;
		// 向下取整
	}
	return bin;
}

int main() {
	int a = 9;

	stack<int> stk = dec2bin(a);

	int len = stk.size();

	for (int i = 0; i < len; i++) {
		int b = stk.top();
		cout << b;
		stk.pop();
	}
}

十六进制转十进制

直接转是不好转的,手算的原始做法是先转成二进制再转十进制

这个算是非常规做法

int main() {

	string str;
	cin >> str;
	
	// 利用stringsteam将1进制转为10进制
	stringstream ss;
	// hex是1进制的控制符,8进制是oct
	ss << hex << str;
	int num;
	ss >> num;
	cout << num;

	return 0;
}

常规做法

int main() {

	string str;
	cin >> str;
	// 前两位0x不要,从后面开始
	// 16进制是0-9然后A,B,C,D,E,F
	int res = 0;
	// 注意这里是正向的
	for (int i = 2; i <str.length(); i++) {
		int digit;
		if (isdigit(str[i])) digit = str[i] - '0';
		else digit = str[i] + 10 - 'A';
		res = res * 16 + digit;
	}
	cout<<res;

	return 0;
}
posted @ 2022-05-26 22:53  YaosGHC  阅读(24)  评论(0编辑  收藏  举报