二进制,八进制,十六进制转十进制 c++

紧接着十进制转二进制,八进制,十六进制-CSDN博客这篇文章

输入一个二进制,八进制的数,怎样能转化为十进制呢?

原理如下:

K进制转十进制

按权相加法展开成一个多项式,每项是该位的数码与相应的权之积,把多项式按十进制数的规则进行求和,所得结果即是该数的十进制。

公式:abcd.efg(K)=d*K^0+c*K^1+b*K^2+a*k^3+e*K^-1+f*K^-2+g*K^-3(10)

例:1101.01(2)=1*2^0+0*2^1+1*2^2+1*2^3+0*2^-1+1*2^-2=1+0+4+8+0+0.25=13.25(10)

C知道的回答:

在C++中,可以使用以下方法将二进制数转换为十进制数:

  1. 使用字符串流(stringstream): 首先,将二进制数作为字符串输入到字符串流中,然后使用字符串流的输入运算符(>>)将其转换为十进制数。

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int binaryToDecimal(string binary) {
        stringstream ss;
        ss << binary;
        int decimal = 0;
        ss >> decimal;
        return decimal;
    }
    
    int main() {
        string binary = "101010";
        int decimal = binaryToDecimal(binary);
        cout << "Decimal: " << decimal << endl;//编者注:?答案=输入
        return 0;
    }
  2. 使用位运算: 可以使用位运算符和循环来逐位计算二进制数的十进制值。

    #include <iostream>
    using namespace std;
    
    int binaryToDecimal(string binary) {
        int decimal = 0;
        int power = 1;
        for (int i = binary.length() - 1; i >= 0; i--) {
            if (binary[i] == '1') {
                decimal += power;
            }
            power *= 2;
        }
        return decimal;
    }
    
    int main() {
        string binary = "101010";
        int decimal = binaryToDecimal(binary);
        cout << "Decimal: " << decimal << endl;
        return 0;
    }

如果懂得原理的话可以用,我又编了一段易理解的代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int k,n,a,b,c,d,e,f,g,h,i,j;
    cout<<"请输入数的进制(2或8):";
	cin>>k;
	if(k==2){
		cout<<"请输入一个二进制整数:";
        cin>>n;
	}
	if(k==8){
		cout<<"请输入一个八进制整数:";
        cin>>n;
	}
    a=n/1%10;
    b=n/10%10;
    c=n/100%10;
    d=n/1000%10;
    e=n/10000%10;
    f=n/100000%10;
    g=n/1000000%10;
    h=n/10000000%10;
    i=n/100000000%10;
    j=n/1000000000%10;
    cout<<"转换后的二进制(B)数为:";
cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
    return 0;
}

 

那十六进制转十进制呢?

C知道的回答:

在C++中,可以使用以下方法将十六进制数转换为十进制数:

  1. 使用标准库函数: 可以使用std::stoi函数将十六进制字符串转换为十进制整数。例如:

    #include <iostream>
    #include <string>
    
    int main() {
        std::string hexStr = "1A";
        int decimalNum = std::stoi(hexStr, nullptr, 16);//编者注:?此处有报错
        std::cout << "Decimal: " << decimalNum << std::endl;
        return 0;
    }

    输出结果为:Decimal: 26

  2. 使用自定义函数: 可以编写自定义函数来将十六进制数转换为十进制数。例如:

    #include <iostream>
    #include <string>
    
    int hexToDecimal(std::string hexStr) {
        int decimalNum = 0;
        int base = 1;
        int size = hexStr.size();
    
        for (int i = size - 1; i  0; i--) {
        //编者注:此处有误,应该为:for(int i=size-1;i>=0;i--)
            if (hexStr[i] >= '0' && hexStr[i] <= '9') {
                decimalNum += (hexStr[i] - '0') * base;
            } else if (hexStr[i] >= 'A' && hexStr[i] <= 'F') {
                decimalNum += (hexStr[i] - 'A' + 10) * base;
            } else if (hexStr[i] >= 'a' && hexStr[i] <= 'f') {
                decimalNum += (hexStr[i] 'a' + 10) * base;
                //编者注:此处有误,应该为:decimalNum+=(hexStr[i]='a'+10)*base;
            }
            base *= 16;
        }
    
        return decimalNum;
    }
    
    int main() {
        std::string hexStr = "1A";
        int decimalNum = hexToDecimal(hexStr);
        std::cout << "Decimal: " << decimalNum << std::endl;
        return 0;
    }

    输出结果为:Decimal: 26

(C知道的回答不包括编者注编者注为编者后期发现的错误)

 最后代码:

#include<bits/stdc++.h>
using namespace std;
int hexToDecimal(std::string hexStr) {
    int decimalNum = 0;
    int base = 1;
    int size = hexStr.size();

    for (int i = size - 1; i >= 0; i--) {
        if (hexStr[i] >= '0' && hexStr[i] <= '9') {
            decimalNum += (hexStr[i] - '0') * base;
        } else if (hexStr[i] >= 'A' && hexStr[i] <= 'F') {
            decimalNum += (hexStr[i] - 'A' + 10) * base;
        } else if (hexStr[i] >= 'a' && hexStr[i] <= 'f') {
            decimalNum += (hexStr[i] = 'a' + 10) * base;
        }
        base *= 16;
    }

    return decimalNum;
}
int main(){
    int k,a,b,c,d,e,f,g,h,i,j;
    cout<<"请输入数的进制(2,8或16):";
	cin>>k;
	if(k==2){
		int n;
		cout<<"请输入一个二进制(B)整数:";
        cin>>n;
        a=n/1%10;
        b=n/10%10;
        c=n/100%10;
        d=n/1000%10;
        e=n/10000%10;
        f=n/100000%10;
        g=n/1000000%10;
        h=n/10000000%10;
        i=n/100000000%10;
        j=n/1000000000%10;
        cout<<"转换后的十进制(D)数为:";
        cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
	}
	if(k==8){
		int n;
		cout<<"请输入一个八进制(O)整数:";
        cin>>n;
        a=n/1%10;
        b=n/10%10;
        c=n/100%10;
        d=n/1000%10;
        e=n/10000%10;
        f=n/100000%10;
        g=n/1000000%10;
        h=n/10000000%10;
        i=n/100000000%10;
        j=n/1000000000%10;
        cout<<"转换后的十进制(D)数为:";
        cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
	}
	if(k==16){
		std::string hexStr;
		std::cout<<"请输入一个十六进制(H)整数:";
        std::cin>>hexStr;
        int decimalNum = hexToDecimal(hexStr);
        std::cout << "转换后的十进制(D)数为:" << decimalNum;
	} 
    return 0;
}

样例运行结果:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/593335.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【kettle006】kettle访问华为openGauss高斯数据库并处理数据至execl文件(已更新)

1.一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下华为openGauss高斯数据库相关知识体系 3.欢迎批评指正&#xff0c;跪谢…

2024年汉字小达人活动还有5个月开赛:来做18道历年选择题备考吧

距离2024年第11届汉字小达人比赛还有四个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。②把历年真题刷刷熟&#xff0c;这对了解汉字小达…

任何人都可做的兼职副业,一单29.9元,利润70%的怀旧游戏项目

偶然发现一个博主正在直播玩一款经典的俄罗斯方块游戏机。这款游戏机年代久远&#xff0c;勾起了我对学生时代的无尽回忆。 那时&#xff0c;看到同学们玩这款游戏&#xff0c;我总是心生羡慕。为了能拥有一台自己的游戏机&#xff0c;我曾节衣缩食&#xff0c;悄悄攒钱购买。…

C++类定义时成员变量初始化

在C11中允许在类定义时对成员变量初始化。 class A { public:A() { }void show(){cout << "m_a " << m_a << endl;cout << "m_b " << m_b << endl;} private:int m_a 10;//类定义时初始化int m_b; //没有初始化…

CP,FT,WAT有什么区别?

‍ 知 识星球&#xff08;星球名&#xff1a; 芯片制造与封测社区&#xff0c;星球号&#xff1a; 63559049&#xff09;里的学员问&#xff1a; CP,FT,WAT都是与 芯片的测试有关&#xff0c;他们有什么区别呢&#xff1f; 如何区‍分&#xff1f; ‍ ‍ CP,FT,WAT分别…

MySQL LRU算法(冷热数据分离)

背景 MySQL中使用的InnoDB存储引擎采用了一种特别的最近最少使用&#xff08;LRU, Least Recently Used&#xff09;算法来管理其Buffer Pool中的页&#xff08;包括数据页和索引页&#xff09;。Buffer Pool是InnoDB用来缓存数据&#xff0c;以减少磁盘I/O操作的内存区域。正…

python数据分析中数据可视化简单入门

1.折线图表 首先引入相关包pyecharts&#xff0c;如果没下载可以先下载 pip install pyecharts from pyecharts.charts import Lineline Line() # 添加x轴 line.add_xaxis([呱了个呱,羊村,牟多,蜂地,喵帕斯]) # 添加y轴 line.add_yaxis("GDP",[50,30,40,34,63,22])…

Jrebel 最新的 2023.4 、 2024.1 激活方法

Idea Jrebel 插件安装 在线激活 &#xff08;推荐&#xff09; 访问&#xff1a; https://www.jpy.wang/page/jrebel.html 在jrebel激活的时候填写相应的地址

逻辑漏洞:修改Response状态值导致的逻辑漏洞

目录 1、什么是respone状态值&#xff1f; 2、利用原理 3、PHPYUN人才招聘系统靶场演示 今天还是继续学习逻辑漏洞相关的知识&#xff0c;今天的主题是“修改Response状态值导致的逻辑漏洞”&#xff0c;今天的内容还是参考别的大佬总结好的&#xff0c;我只是在这里进行学习…

Linux系统配置JAVA环境

一、jar包下载 官网:https://www.oracle.com/java/technologies/downloads 二、文件上传 上传到linux服务器 解压 下面是解压的路径 三、修改profile文件 修改etc下的profile文件&#xff0c;添加以下内容 vim /etc/profileexport JAVA_HOME/root/java/jdk-17.0.11 expo…

ttkbootstrap界面美化系列之Meter(六)

Meter是计量表控件&#xff0c;在大数据统计类的界面设计中使用较多&#xff0c;本文将介绍ttk中的Meter控件 一&#xff1a;Meter接口 print(help(ttk.Meter)) Help on class Meter in module ttkbootstrap.widgets:class Meter(tkinter.ttk.Frame)| Meter(masterNone, bo…

半监督节点分类:标签传播和消息传递

基础概念回顾 传统图机器学习的特征工程——节点层面&#xff0c;连接层面&#xff0c;全图层面 节点层面&#xff1a;信用卡欺诈 连接层面&#xff1a;推荐可能认识的人 全图层面&#xff1a;预测分子结构 半监督节点分类 半监督节点分类&#xff1a;用已知标签节点预测未…

推荐书单|提升境界、思维能力

1、《别做正常的傻瓜》 豆瓣评分&#xff1a;8.1 通过揭示人们在日常生活中常见的非理性行为&#xff0c;引导读者认识并克服这些行为&#xff0c;从而做出更明智的决策。 2、《活法》 豆瓣评分&#xff1a;8.1 稻盛和夫分享其人生哲学和经营哲学的著作&#xff0c;强调了正确…

【MATLAB】解决不同版本MATLAB出现中文乱码的问题

解决不同版本MATLAB出现中文乱码的问题 方法1&#xff1a;更改保存类型为GBK方法2&#xff1a;记事本打开方法3&#xff1a;Notepad参考 低版本matlab打开高版本Matlab的.m文件时&#xff0c;出现中文乱码问题。比如下图&#xff1a; 出现原因为&#xff1a; 编码格式不统一问…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位&#xff0c;它有助于医生快速、准确地识别和分析肺部病变。…

关于 Vue.js 双向数据绑定基本实现认知

写在前面 很早的一篇博客&#xff0c;整理了部分&#xff0c;蹭假期整理完博文内容涉及:双向数据绑定 实现方式简单介绍基于发布订阅、数据劫持的双向数据绑定两种不同实现(ES5/ES6) Demo&#xff0c;以及代码简单分析Object.defineProperty && Proxy API 介绍以及特性…

如何配置X86应用程序启用大地址模式(将用户态虚拟内存从2GB扩充到3GB),以解决用户态虚拟内存不够用问题?(项目实战案例解析)

目录 1、概述 2、为什么不直接将程序做成64位的&#xff1f; 3、进程内存不足导致程序发生闪退的案例分析 3.1、问题说明 3.2、将Windbg附加到程序进程上进行动态调试 3.3、动态调试的Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.4、malloc或new失败的…

企业微信主体能不能修改?

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

Java 三大特性之继承

目录 一、为什么需要继承&#xff1f; 二、继承概念 三、继承的语法 四、子类访问父类成员 五、super关键字 六、继承关系下的构造方法 七、继承关系下的初始化 八、protected关键字 九、继承的三种方式 十、final关键字 十一、继承和组合 一、为什么需要继承&#…

五一玩狗“丧志”记

我天生喜欢狗狗。五一来到媳妇老家这几天&#xff0c;只要有机会我都要给一个只叫“瘦瘦”的狗狗多攒一些吃的。 它是一条看家狗&#xff0c;有大人膝盖那么高八十厘米那么长。通体毛色以黄黑为主&#xff0c;少许白色主要集中在爪子和下巴。两耳直挺挺尖尖的竖立着&#xff0c…
最新文章