C++进制转换相关习题

十进制->八进制,十六进制

题目描述
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。

方法一
字符串暴力转,适用于十进制转所有进制。

代码

#include <iostream>
#include <algorithm>
#include<string>
using namespace std;
int main(){
//     int val = 1234;
//     //cout版本类似,启用showbase和设置前导大写,最后分别用八进制和十六进制输出即可
//     cout.setf(ios::showbase | ios::uppercase);
//     cout << oct << val << " " << hex << val << endl;
//     return 0;
    int n=1234;
    vector<int>v;
    string re1="",re2="";
    string eight="01234567";
    string sixteen="0123456789ABCDEF";
    int num=n;
    while(num){
        char c=eight[num%8];
        //这里的insert()第一个参数表示插入位置,第二个参数表示插入几个,第三个参数表示要插入的字符
        re1.insert(0,1,c);
        num/=8;
    }
    num=n;
    while(num){
        char c=sixteen[num%16];
        re2.insert(0,1,c);
        num/=16;
    }
    cout<<0<<re1<<' '<<"0X"<<re2<<endl;//控制格式强行转
    return 0;
}

方法二
利用C++的cout进行格式控制。

代码

#include <iostream>
using namespace std;
int main() {
    int val = 1234;
    //cout版本类似,启用showbase和设置前导大写,最后分别用八进制和十六进制输出即可
    cout.setf(ios::showbase | ios::uppercase);
    cout << oct << val << " " << hex << val << endl;
    return 0;

dec 设置整数的基数为10
hex 设置整数的基数为16
oct 设置整数的基数为8

ios::showbase 强制输出整数的基数(八进制以0打头,十六进制以0x打头)
ios::uppercase 在以科学计数法输出E和十六进制输出字母X时,以大写表示

方法三
使用printf函数,printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示。

代码

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    int val = 1234;
    /*
    printf可以使用使用格式控制串“%o”、“%X”分别输出
    八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
    */
    printf("%#o %#X\n", val, val);
    return 0;
}

十六进制->十进制

题目描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。

代码

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main(){
    string num="ABCDEF";
    int re=0;
    int n=num.size();
    for(int i=0;i<n;i++){
        re+=pow(16,n-1-i)*(num[i]-'A'+10);
    }
    cout<<setw(15)<<re<<endl;
    return 0;
}

十进制->六进制

首先学习 int与char的相互转换 C++ 中的int与char相互转换

题目描述
小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

代码

#include<iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
    int num;
    cin>>num;
    string re="";
    int temp;
    while(num){
        temp=num%6;
        char c=char(temp+'0');//先转化为ascii码的数值,再转
        re.insert(0,1,c);
        num/=6;
    }
    cout<<re<<endl;
    return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值