求二进制转十进制代码

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

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

求代码

#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

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

高位是符号位,符号位等于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,这是十进制数的绝对值