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

重新给我编写一个简单点的程序也可以啊!一定要用while循环结构,因为往后的还没有学!#include<iostream>usingstd::cout;usingstd:... 重新给我编写一个简单点的程序也可以啊!一定要用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;

}
展开
 我来答
stlife010
2012-02-24
知道答主
回答量:9
采纳率:0%
帮助的人:4.1万
展开全部
把number1类型换成char型,计算更方便
追问
您好,我是新手,请问题目中要求用整除还有求模来一个个地将输入的数字的每一位“剔”出来怎么办。
还有,我想了解我的代码运行的时候为什么会出现x等于0的情况?你可以复制代码运行一下。。。谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wxhysoft
2012-02-22 · TA获得超过371个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:311万
展开全部
#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;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CCC初学者CCC
2012-03-08 · 超过18用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:47.5万
展开全部
没写返回值 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,我都快疯了。。。
追答
你的这么进行测试的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小水客栈
2012-02-25 · 超过19用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:47.4万
展开全部
好多解答。。
追问
你好,我就是想知道为什么我一运行程序会提示我x=0?因为我是初学,所以还不会用其它复杂的东东。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式