求高手解答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;
} 展开
#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;
} 展开
4个回答
展开全部
把number1类型换成char型,计算更方便
追问
您好,我是新手,请问题目中要求用整除还有求模来一个个地将输入的数字的每一位“剔”出来怎么办。
还有,我想了解我的代码运行的时候为什么会出现x等于0的情况?你可以复制代码运行一下。。。谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没写返回值 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;
}
#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,我都快疯了。。。
追答
你的这么进行测试的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好多解答。。
追问
你好,我就是想知道为什么我一运行程序会提示我x=0?因为我是初学,所以还不会用其它复杂的东东。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询