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

Decimal to Binary conversion using recursion

本文关键字:二进制 转换 十进制 递归      更新时间:2023-10-16
#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++编译器和这个代码似乎不工作。有人可以在他们的编译器上运行这个代码,并给我一个反馈。另外,如果你觉得代码不正确,请告诉我你这么认为的原因。

既不使用静态变量也不使用全局变量的正确实现(两者都是非常糟糕的,无论如何都要避免它们),可以像

这样简单地提供所需的输出。
#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 << "answers = " << binary << std::endl;
}

请注意,当我们使用int来存储二进制表示时,对于任何输入> 524287,整个事情都中断了。

这当然假设你的整数是64位的。仅使用0和1可以写的最大数字是int x = 1111111111111111111,当您将其解释为二进制时,可转换为524287。

对于32位甚至16位整数,这个范围明显更小。

也看看:全局变量不好吗?

显然,i++必须在递归发生之前完成。

#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);
        i++;
        d2b(num/2);
    }
    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);
}

习惯调试你的代码!

如前所述,您还可以这样使用它:

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