使用递归进行十进制到二进制的转换
Decimal to Binary conversion using 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++编译器和这个代码似乎不工作。有人可以在他们的编译器上运行这个代码,并给我一个反馈。另外,如果你觉得代码不正确,请告诉我你这么认为的原因。
既不使用静态变量也不使用全局变量的正确实现(两者都是非常糟糕的,无论如何都要避免它们),可以像
这样简单地提供所需的输出。#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);
}
相关文章:
- C++从二进制转换为十进制数
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- 十进制,包括负到 32 位二进制转换器
- 输入 1024 后十进制到二进制转换的输出错误?
- C 二进制转换为双精度的转换运算符
- 将二进制转换为负整数
- 如何将 32 位编译二进制转换为 64 位
- 如何在 C++ 中将二进制转换为十六进制
- 如何理解 c++ 中的 MNIST 二进制转换器?
- 以下对二进制转换代码的小数如何工作
- 具有递归功能的二进制转换给出一个奇数值
- 了解C++位操作中的二进制转换实现
- 编写将二进制转换为文本C 6的程序
- 反射格雷码到二进制转换中的幻数
- 为什么我总是必须除以 49 才能得到二进制转换器 + cout 歧义的正确答案?
- 如何使用库将二进制转换为十进制<bitset>?
- C++二进制转换为十进制,八进制
- 脚本到二进制转换和对象序列化