二进制转十进制的表达式C或者C++

img

思路:
1、通过将M/=10与0比较得到M的位数N
2、根据M位数N创建一个N维数组
3、将M对10取余并让M/=10得到各位的二进制值并附给数组的相应的位置
4、将数组从末尾到头进行索引,为1则根据当前数组下标志进行式子输出
附 实例代码

#include <iostream>
#include <cstdio>
#include<stdint.h>
#include<math.h>
using namespace std;
int main()
{
    int m;
    cout<<"请输入二进制数字:0x";
    cin>>m;
    void paixu(int m);
    paixu(m);
    return 0;
}
void paixu(int m)
{
    int size;
    size=m;
    int length=0;
    for(int i=0;;i++)       //通过将M/=10与0比较得到M的位数N
    {
        size/=10;
        if(size==0)
        {
            length=i;
            break;
        }
    }
    int *a=new int[length];         //根据M位数N创建一个N维数组
    for(int i=0;i<=length;i++)      //将M对10取余并让M/=10得到各位的二进制值并附给数组的相应的位置
    {
        if((m%10)==1)a[i]=1;
        else if((m-m/10*10)>1)
        {
            cout<<"输入错误"<<endl;
            return;
        }
        else a[i]=0;
        m/=10;
    }
    int flag_plus=0;            //+号输出标志位
    int result=0;
    for(int i=length;i>=0;i--)  //将数组从末尾到头进行索引,为1则根据当前数组下标志进行式子输出
    {   
        if(a[i])
        {
            if(flag_plus)
            {
                cout<<"+";
            }
            else flag_plus=1;
            cout<<"1*2^"<<i;
            result+=pow(2, i); 
        }
    }
    cout<<endl<<"result="<<result;
    delete[] a;
}