#include
using namespace std;
#include
int main()
{
int sum = 0, sum1 = 0, n;
int *p;
cout << "请输入二进制的长度:" << endl;
cin >> n;
p = new int[n];
cout << "请输入一个二进制的数字:" << endl;
cin >> *p;
int s1 = { 0 };
for (int i = 0; i < n; i++)
{
if (p[i] == 0) //这边老是跳过第一个判断语句,直接进行第二个语句
{
sum = sum + 1;
}
else
{
sum1 = sum1 + 2;
}
cout << *p << "转换成十进制后为:" << sum + sum1 << endl;
}
delete[]p;
return 0;
}
应该是获取二进制数字到数组那里不对,然后根据数组内容把对应的二进制转为十进制的算法也需要改正,下面是一个实现,供参考:
参考链接:
位进制是什么意思_百度知道
#include <iostream>
using namespace std;
int main()
{
int sum = 0, sum1 = 0, n;
int *p;
cout << "请输入二进制的长度:" << endl;
cin >> n;
p = new int[n];
cout << "请输入一个二进制的数字:" << endl;
//获取n个数字输入到数组
for(int i=0;i<n;i++){
cin >> p[i];
}
// for(int i=0;i<n;i++){
// cout<<p[i];
// }
// cout<<endl;
int s1 = { 0 };
int weight=1; //每一位的位权值 ,此为二进制数组最右边的数的位权值
for (int i = n-1; i >=0 ; i--)
{
//
if (p[i] == 1) //这边老是跳过第一个判断语句,直接进行第二个语句
{
sum+= weight; //因为二进制每一位只有0和1,所以如果当前数不是0,加上他的位权值就可以了
}
weight*=2; //下一个数位的位权值
cout << *p << "转换成十进制后为:" << sum<< endl;
}
delete[]p;
return 0;
}
你要学会调试啊在循环前面加个断点,可以看出你只输入了第一个元素*p,当然不行,要循环输入