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

求二进制转十进制代码

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

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

求代码

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2年前
    #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

    点赞 评论 复制链接分享
  • zx197822 那年的冬天--- 2年前

    高位是符号位,符号位等于1,则这是一个用补码表示的负的十进制数,用补码的反向算法得到十进制数的绝对值:

    1、10000000B-1=01111111B

    2、01111111B取反=10000000B

    3、写出二进制各位基数,个位1,高位是低位乘以2,写二进制数的位数8位为止128、64、32、16、8、4、2、1将10000000按位对齐写在下面一行。

    4、1 0 0 0 0 0 0 0此式按位上下做乘法,结果左右做加法

    5、128+0=128,所以10000000B=128D,这是十进制数的绝对值

    点赞 评论 复制链接分享

相关推荐