使用递归的十进制到二进制转换

时间:2014-07-07 10:31:59

标签: c++ recursion

#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 ++编译器,这段代码似乎不起作用。有人可以在他们的编译器上运行此代码并给我一个反馈。如果代码看起来不正确,请告诉我你这么认为的原因。

3 个答案:

答案 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位整数,此范围显着降低。

另请参阅:Are global variables bad?

答案 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);
}