十进制->八进制,十六进制
题目描述:
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
方法一:
字符串暴力转,适用于十进制转所有进制。
代码
#include <iostream>
#include <algorithm>
#include<string>
using namespace std;
int main(){
// int val = 1234;
// //cout版本类似,启用showbase和设置前导大写,最后分别用八进制和十六进制输出即可
// cout.setf(ios::showbase | ios::uppercase);
// cout << oct << val << " " << hex << val << endl;
// return 0;
int n=1234;
vector<int>v;
string re1="",re2="";
string eight="01234567";
string sixteen="0123456789ABCDEF";
int num=n;
while(num){
char c=eight[num%8];
//这里的insert()第一个参数表示插入位置,第二个参数表示插入几个,第三个参数表示要插入的字符
re1.insert(0,1,c);
num/=8;
}
num=n;
while(num){
char c=sixteen[num%16];
re2.insert(0,1,c);
num/=16;
}
cout<<0<<re1<<' '<<"0X"<<re2<<endl;//控制格式强行转
return 0;
}
方法二:
利用C++的cout进行格式控制。
代码
#include <iostream>
using namespace std;
int main() {
int val = 1234;
//cout版本类似,启用showbase和设置前导大写,最后分别用八进制和十六进制输出即可
cout.setf(ios::showbase | ios::uppercase);
cout << oct << val << " " << hex << val << endl;
return 0;
dec 设置整数的基数为10
hex 设置整数的基数为16
oct 设置整数的基数为8
ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头)
ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示
方法三:
使用printf函数,printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int val = 1234;
/*
printf可以使用使用格式控制串“%o”、“%X”分别输出
八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
*/
printf("%#o %#X\n", val, val);
return 0;
}
十六进制->十进制
题目描述:
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
代码
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main(){
string num="ABCDEF";
int re=0;
int n=num.size();
for(int i=0;i<n;i++){
re+=pow(16,n-1-i)*(num[i]-'A'+10);
}
cout<<setw(15)<<re<<endl;
return 0;
}
十进制->六进制
首先学习 int与char的相互转换 C++ 中的int与char相互转换
题目描述:
小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。
代码
#include<iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int num;
cin>>num;
string re="";
int temp;
while(num){
temp=num%6;
char c=char(temp+'0');//先转化为ascii码的数值,再转
re.insert(0,1,c);
num/=6;
}
cout<<re<<endl;
return 0;
}