将十进制数转换为二进制数的意外结果
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;
}
希望对你有所帮助
# 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;
}
希望对你有所帮助