#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
long int d2b(int);
static long int binary=0;
static int i=0;
long int d2b(int num)
{
if(num!=0)
{
binary=binary+pow(10,i)*(num%2);
d2b(num/2);
i++;
}
return(binary);
}
int main()
{
int num;
long int binary_ans=0;
cout<<"Enter the number.";
cin>>num;
binary_ans=d2b(num);
cout<<"Ans = "<<binary_ans;
getch();
return(0);
}
我正在使用Dev C ++编译器,这段代码似乎不起作用。有人可以在他们的编译器上运行此代码并给我一个反馈。如果代码看起来不正确,请告诉我你这么认为的原因。
答案 0 :(得分:4)
既没有静态变量也没有全局变量的正确实现(两者都只是简单的邪恶,试图不惜一切代价避免它们),它们为您提供所需的输出,可以像
一样简单#include <iostream>
long int d2b(int x)
{
return x ? (x%2 + 10*d2b(x/2)) : 0;
}
int main()
{
std::cout << "enter a number:" << std::endl;
int input;
std::cin >> input;
long int binary = d2b(input);
std::cout << "ans = " << binary << std::endl;
}
请注意,由于我们正在使用int
来存储我们的二进制表示,因此任何输入&gt;都会中断。 524287。
这当然假设你的整数是64位。
您只能使用0和1编写的最大数字是int x = 1111111111111111111
,当您将其解释为二进制时,将转换为524287。
对于32位甚至16位整数,此范围显着降低。
答案 1 :(得分:1)
显然{<1}}必须在递归之前完成。
i++
习惯调试代码!
答案 2 :(得分:0)
如前所述,您也可以这种方式使用它:
#include<iostream>
#include<math.h>
using namespace std;
string d2b(int);
static string binary;
string d2b(int num)
{
if(num!=0)
{
binary= to_string(num%2) + binary;
d2b(num/2);
}
return(binary);
}
int main()
{
int num;
string binary_ans="";
cout<<"Enter the number.";
cin>>num;
binary_ans=d2b(num);
cout<<"Ans = "<<binary_ans;
getch();
return(0);
}