求高手解答c++编程将二进制数转化为十进制数的问题!我写的代码总是出错,显示x为0。可否替我找出错误?

重新给我编写一个简单点的程序也可以啊!一定要用while循环结构,因为往后的还没有学!
#include <iostream>
using std::cout;
using std::cin;
using std::fixed;
using std::endl;

int main()
{
int x;
int y;
int j;
int k;
int m;
int n;
int number1;
int number2;

cout << "请输入二进制数:" << endl;
cin >> number1;

x = 10;
m = 1;
j = number1/x;
k = 10*x;

if ( j == 0 )
{
number2 = number1;
}
else
{
while ( j != 0 )
{
y = ( number1%k - number1%x )/x;
n = 1;
while ( n <= m )
{
y = y*2;
n = n + 1;
}
m = m + 1;
x = x*10;
number2 += y;
}
number2 = number2 + number1%10;
}

cout << "对应的十进制数是:" << number2 << endl;

}

第1个回答  2012-02-24
把number1类型换成char型,计算更方便追问

您好,我是新手,请问题目中要求用整除还有求模来一个个地将输入的数字的每一位“剔”出来怎么办。
还有,我想了解我的代码运行的时候为什么会出现x等于0的情况?你可以复制代码运行一下。。。谢谢!

第2个回答  2012-02-22
#include<iostream>
using namespace std;

int main()
{
char buff[64]; // 输入缓存
int n=0; // 二进制位数
int w=1; // 当前位权重

int number=0; // 十进制值

// 输入
cout<<"请输入二进制值(最大32位)"<<endl;
cin>>buff;

// 获取长度,去除非法数
char* p=buff;
while(*p>='0' && *p++<='1') n++; // 只能是1或0

// 转换2进制到10进制
while(n--)
{
number += (buff[n]-'0')*w;
w*=2;
}

// 输出
cout << "对应的十进制值:"<< endl;
cout<< number<<endl;
return number;
}追问

您好,是这样的,我是自学的新手,你写的东西我还看不太懂。题目中要求用整除还有求模来一个个地将输入的数字的每一位“剔”出来。
还有,我想了解我的代码运行的时候为什么会出现x等于0的情况。。。谢谢!

追答

#include
using namespace std;

int main()
{
int x=10; // 处理输入数每位的模
int m=1; // 二进制权重
int number1; // 输入的整数
int number2=0; // 输出的整数,先要初始化0

cout > number1;

/* 你思路大概意思我理解,但错误太多,我去掉了,我按你的意思重写的在下面
x = 10;
m = 1;
j = number1/x;
k = 10*x; // 这个在你的代码中,没有变过,不符合你的思路
if ( j == 0 )
{
number2 = number1;
}
else
{
while ( j != 0 ) // 这个J后面没有用到,这里就是死循环啦,
{
y = ( number1%k - number1%x )//k没有变过,这不知是个啥东西,因此后面就全乱套了,其实,只要每次右移一位,就简单多了,不必这样处理
n = 1;
while ( n <= m )
{
y = y*2;
n = n + 1;
}
m = m + 1;
x = x*10;
number2 += y; // 这里number2没有初始化就加y啦,
}
number2 = number2 + number1%10;
}
*/

// 下面是为你重写的代码,非常简单,已做了解释
while(number1) //number1为0,已没有位可以处理,结束
{
number2 += m* (number1%x); //每次加上,当前位余数0或1*权重
number1/=x; //右移一位,去除已处理过的位
m*=2; //下个二进制位的权重

}
cout << "对应的十进制数是:" << number2 << endl;
}

追问

我回头试试。。。谢谢呀!

本回答被提问者和网友采纳
第3个回答  2012-03-08
没写返回值 return 0;
#include <iostream>
using std::cout;
using std::cin;
using std::fixed;
using std::endl;

int main()
{
int x;
int y;
int j;
int k;
int m;
int n;
int number1;
int number2;

cout << "请输入二进制数:" << endl;
cin >> number1;

x = 10;
m = 1;
j = number1/x;
k = 10*x;

if ( j == 0 )
{
number2 = number1;
}
else
{
while ( j != 0 )
{
y = ( number1%k - number1%x )/x;
n = 1;
while ( n <= m )
{
y = y*2;
n = n + 1;
}
m = m + 1;
x = x*10;
number2 += y;
}
number2 = number2 + number1%10;
}

cout << "对应的十进制数是:" << number2 << endl;
return 0;
}追问

你好,我试了一下,仍然显示x = 0,我都快疯了。。。

追答

你的这么进行测试的?

追问

复制代码用c++跑的呀~

追答

我写了一个 你看看能不能理解
#include
#include
using namespace std;
void main()
{
string str;
char A[4];
int x=0,y=0,z=0,i,w=1,daan=0;
cout>A;
while(x=0;x--)
{
if (A[x] != '0')
{
daan+=1*w;
}
w*=2;
}
}
cout<<"结果是:"<<daan<<endl;
};

第4个回答  2012-02-25
好多解答。。追问

你好,我就是想知道为什么我一运行程序会提示我x=0?因为我是初学,所以还不会用其它复杂的东东。。。

相似回答