c++进制转换
使用库函数输出
C语言输出
printf("%05o\n",35); //按八进制格式输出,保留5位高位补零
printf("%03d\n",35); //按十进制格式输出,保留3位高位补零
printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零
c++输出
c++输出十六进制默认为小写字符
#include <bitset>
#include<iostream>
using namespace std;
int main()
{
cout << "35的8进制:" << std::oct << 35<< endl;
cout << "35的10进制" << std::dec << 35 << endl;
cout << "35的16进制:" << std::hex << 35 << endl;
cout << "35的2进制: " << bitset<8>(35) << endl; //<8>:表示保留8位输出
return 0;
}
使十六进制输出为大写
如果想要输出大写的话,先包含头文件 #include cout<<setiosflags(ios::uppercase)<<hex<<int
;即可输出大写。
#include <iostream>
#include <iomanip>
void main()
{
int num_1 = 10;
int num_2 = 11;
int num_3 = 12;
int num_4 = 13;
cout << num_1 << endl;
cout << setiosflags(ios::uppercase) << hex << num_2 << endl;
cout << dec << num_3 << endl;
cout << setiosflags(ios::uppercase) << hex << num_4 << endl;
}
自己编写函数输入输出
任意2-36进制数转化为10进制数
int Atoi(string s,int radix) //s是给定的radix进制字符串
{
int ans=0;
for(int i=0;i<s.size();i++)
{
char t=s[i];
if(t>='0'&&t<='9') ans=ans*radix+t-'0';
else ans=ans*radix+t-'a'+10;
}
return ans;
}
将10进制数转换为任意的n进制数,结果为char型。
string intToA(int n,int radix) //n是待转数字,radix是指定的进制
{
string ans="";
do{
int t=n%radix;
if(t>=0&&t<=9) ans+=t+'0';
else ans+=t-10+'a';
n/=radix;
}while(n!=0); //使用do{}while()以防止输入为0的情况
reverse(ans.begin(),ans.end());
return ans;
}