Annreo 2019-04-22 20:23 采纳率: 0%
浏览 1959

求二进制转十进制代码

输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。

建议:用字符数组存储大整数。

求代码

  • 写回答

3条回答 默认 最新

  • threenewbee 2019-04-23 00:00
    关注
    #include <iostream>
    #include <math.h>
    #include <sstream>//使用该库函数的ostringstream,将int变成string
    using namespace std;
    
    //字符转数字
    int charToDigit(char c)
    {
        if(c=='A')
            return 10;
        else if(c=='B')
            return 11;
        else if(c=='C')
            return 12;
        else if(c=='D')
            return 13;
        else if(c=='E')
            return 14;
        else if(c=='F')
            return 15;
        else
            return c-'0';
    }
    
    int jinzhi16to10(string pre)
    {
        int length=pre.size();
        int result=0;
        for(int i=0; i<length; i++)
        {
            result+=((charToDigit(pre[i]))*pow(16,length-1-i));
        }
        return result;
    }
    
    int jinzhi8to10(string pre) {
        int length=pre.size();
        int result=0;
        for(int i=0; i<length; i++)
        {
            result+=((charToDigit(pre[i]))*pow(8,length-1-i));
        }
        return result;
    }
    
    int jinzhi2to10(string pre)
    {
        // 在此处可以添加验证是否为二进制数字的逻辑
        int length=pre.size();
        int result=0;
        for(int i=0; i<length; i++)
        {
            result+=((charToDigit(pre[i]))*pow(2,length-1-i));
        }
        return result;
    }
    
    string jinzhi10to2(int pre) {
        ostringstream oss;
        while(pre!=0){
            oss<<pre%2;
            pre/=2;
        }
        string res=oss.str();
        oss.str("");//清空原数据流
        for(int i=0;i<res.length();i++){
            oss<<res[res.length()-i-1];
        }
        return oss.str();
    }
    string jinzhi10to8(int pre) {
        ostringstream oss;
        while(pre!=0){
            oss<<pre%8;
            pre/=8;
        }
        string res=oss.str();
        oss.str("");//清空原数据流
        for(int i=0;i<res.length();i++){
            oss<<res[res.length()-i-1];
        }
        return oss.str();
    }
    string jinzhi10to16(int pre) {
        ostringstream oss;
        while(pre!=0){
            oss<<pre%16;
            pre/=16;
        }
        string res=oss.str();
        oss.str("");//清空原数据流
        for(int i=0;i<res.length();i++){
            oss<<res[res.length()-i-1];
        }
        return oss.str();
    }
    int main()
    {
        /**
        用于从控制台获取字符串A
           int n;
           cin>>n;
           string *A=new string[n];
           for(int i=0;i<n;i++){
               cin>>A[i];
           }*/
    
        cout<<jinzhi10to2(jinzhi16to10("A2"));
    }
    
    

    https://www.cnblogs.com/simuhunluo/p/8632891.html

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大