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

Unexpected results converting decimal number to binary

# 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。

int i=0,n;

应该是

int i=0;

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

这不是您的代码的唯一问题,但我相信您可以解决其余问题。

你的方法有限,转换成二进制的效率不高

你应该使用字符串,它更有用,而且范围足够大,可以容纳任何数字

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

#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;
}

希望对你有所帮助