一,十进制转其他进制:
1 十进制转R进制
#include<iostream>
using namespace std;
void pre(int n,int r){
int temp;
if(n==0)
return ;
else{
pre(n/r,r);//递归
temp=n%r;
if(temp<10)
cout<<temp;
else
printf("%c",'A'+temp-10);
}
}
int main(){
int n,r;
while(~scanf("%d%d",&n,&r)){
if(n==0)
cout<<"0"<<endl;
if(n<0){
cout<<"-";
n=-n;
}
pre(n,r);
cout<<endl;
}
return 0;
}
2.十进制转八进制(直接%o 输出就行了)
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
printf("%o",n);
}
3.十进制转十六进制(直接%x %X 输出就行了)
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
printf("%x",n);//小写形式
printf("%X",n);//大写形式
}
二,其他进制转十进制:
1.二进制转十进制:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string str;
cin>>str;
int len=str.size() ;
int temp=0;
int sum=0;
for(int i=len-1;i>=0;i--){
sum+=(str[i]-'0')*pow(2,temp);
temp++;
}
cout<<sum<<endl;
}
2,八进制转十进制:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string str;
cin>>str;
int len=str.size() ;
int temp=0;
int sum=0;
for(int i=len-1;i>=0;i--){
sum+=(str[i]-'0')*pow(8,temp);
temp++;
}
cout<<sum<<endl;
}
3,十六进制转十进制:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string str;
cin>>str;
int len=str.size() ;
int temp=0;
int sum=0;
for(int i=len-1;i>=0;i--){
if(str[i]>='0'&&str[i]<='9'){
sum+=(str[i]-'0')*pow(16,temp);
temp++;
}
else if(str[i]>='A'&&str[i]<='F'){
sum+=((str[i]-'A')+10)*pow(16,temp);
temp++;
}
else if(str[i]>='a'&&str[i]<='f'){
sum+=((str[i]-'a')+10)*pow(16,temp);
temp++;
}
}
cout<<sum<<endl;
}