将十进制数转换为二进制数的意外结果

时间:2015-08-30 04:39:47

标签: c++ binary decimal

# include <iostream>
# include <cmath>
using namespace std;
int main()
{

    int p;
    int n;
    int q;
    cin>>n;
    int r;
    r=0;
    for (int i=0,n; n>1; i=i+1,n=n/2)
    {

    p=n%2;
    q= p*(pow(10,i));
    r=r + q;
}

cout<<r;
system("pause");
return 0;
}

我不应该使用数组。它编译得很好,但是当执行并输入数字时,它不能产生所需的结果。 例如,当输入22时,它给出-2147483648,而期望的输出将是10110。

2 个答案:

答案 0 :(得分:1)

你的方式是有限的,并没有转换为二进制

的效率

你应该使用字符串,它更有帮助,范围足够大,适用于任何数字

这是我的十进制到二进制代码

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main()
{
   long long n;
   string s,bin;
   stack<string> res;

   cin>>n;
   while(n>0)
   {
     if(n%2==0)
         s='0';
     else
         s='1';
     res.push(s);
     n=n/2;
   }
   while(!res.empty())
   {
     bin=bin+res.top();
     res.pop();
   }
   cout<<bin<<endl;

return 0;
}

我希望它会对你有所帮助。

答案 1 :(得分:0)

int i=0,n;

应该是

int i=0;

我不知道你以为你在做什么,但你实际上在做的是声明另一个变量n。由于第二个n变量没有值,因此其余代码不起作用。

这不是你的代码唯一的问题,但我相信你可以弄明白其余的。