进制转换基本思路
因为计算机语言主要是涉及2,8,10,16进制的进制转换
而对于10进制,我们再熟悉不过了
所以其进制转换直接/10 %10就可以了
而对于其他进制间的相互转化,有两种方法
1:把这个数转化成十进制,在进行进制转化,但是这在实现中是非常困难的,需要很高的处理程度,否则容易WA,并且时间复杂度也很大,也容易TLE
2:把这个数转化成二进制,如果是(转化成8进制)就每三位一取即可,其他同理
下面是一道进制转换的水题
题目描述
将十六进制数(最多100,000位)转换为8进制数输出。
输入:
一行,一个十六进制数
输出:
一行,八进制数,去掉前导0,如输入是0,则输出为0
样例输入:
123ABC
样例输出:
4435274
具体思路
就是把16进制转化成4位2进制,再每三位一取即可
代码
#include<bits/stdc++.h>
#define INF 10000000
using namespace std;
string k;
int pp[2000005];
bool w[4000004];
int main(){
cin>>k;
int n=k.size();
if(n==1&&k[0]=='0'){printf("0");return 0;}
int ans=0,an;
for(int i=n-1;i>=0;--i){
if(k[i]=='A')an=10;
else if(k[i]=='B')an=11;
else if(k[i]=='C')an=12;
else if(k[i]=='D')an=13;
else if(k[i]=='E')an=14;
else if(k[i]=='F')an=15;
else an=k[i]-'0';
int wp=n*4-(i)*4-1;
w[wp]=an/8;an-=w[wp]*8;
w[wp-1]=an/4;an-=w[wp-1]*4;
w[wp-2]=an/2;an-=w[wp-2]*2;
w[wp-3]=an;
}
int p=0;
for(int i=0;i<=n*4;i+=3){
pp[p]=w[i+2]*4+w[i+1]*2+w[i];
++p;
}bool qzp=0;
for(int i=p+1;i>=0;--i){
if(qzp==0&&pp[i]==0)continue;
qzp=1;printf("%d",pp[i]);
}
return 0;
}