【模板】进制转换【DBSDFZOJ】

进制转换基本思路

因为计算机语言主要是涉及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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值