进制转换
二进制转十进制
#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;
}