思路:
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;
}