一、指定格式转换输出
思路: 直接通过C/C++输出格式转换为相应进制的数。
例如:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
int main(){
printf("%05o\n",300); //按八进制格式输出,保留5位高位补零
printf("%03d\n",300); //按十进制格式输出,保留3位高位补零
printf("%05x\n",300); //按十六进制格式输出,保留5位高位补零
cout<<"300的8进制:" <<std::oct <<300<<endl; //按八进制格式输出
cout<<"300的10进制:" <<std::dec <<300<<endl; //按十进制格式输出
cout<<"300的16进制:" <<std::hex <<300<<endl; //按十六进制格式输出
cout<<"300的2进制:" <<bitset<8>(300)<<endl; //<8>:表示保留8位输出
return 0;
}
输出结果:
二、任意2~36进制数转化为10进制数
自定义进制转换函数:
//m是要转换成的进制,s是给定的m进制下的字符串
//结果为int型
int binary(int m, string s){
int ans=0;
for(int i=0;i<s.size();i++){
char t=s[i];
if(t>='0'&&t<='9')
ans=ans*m+t-'0';
else
ans=ans*m+t-'a'+10;
}
return ans;
}
三、10进制数转换为任意的n进制数
1、自定义进制转换函数:
//n是待转换的十进制数,m是待转换成的进制数
string intToA(int n,int m){
string ans="";
do{ //使用do{}while()循环类型以防止输入为0的情况
int t=n%m;
if(t>=0&&t<=9)
ans+=(t+'0');
else
ans+=(t+'a'-10);
n/=m;
}while(n);
reverse(ans.begin(),ans.end());
return ans;
}
2、_itoa() 函数:
头文件: #include <cstdlib>
作用: 将一个10进制数转换为任意的2-36进制字符串
格式: itoa(num, str, m); num是一个int型的,是要转化的10进制数,str是转化结果,m为目标进制。
代码如下:
#include<cstdio>
#include<cstdlib>
int main(){
int num = 10;
char str[100];
_itoa(num, str, 2); //c++中一般用_itoa,用itoa也行,
printf("%s\n", str);
return 0;
}