请教:“从键盘输入一个十进制的正整数,程序输出它的二进制位”。只用递归函数,不要用数组和指针!>>@_@<<

NirvanaVirus 2009-04-27 11:05:29
我已经写了部分代码,可是在输出的时候它是正着输出的二进制位的数字,我怎么想也想不出来如何将其倒着输出二进制的结果。老师说此代码必须用递归函数来做,望诸位高手给个办法,谢谢!

#include <iostream>
using namespace std;

int binary(int n){
cout << n % 2;
if((n / 2) > 0){
return binary(n / 2);
}
else{
return 0;
}
}

int main(){
binary(302);
}
...全文
2038 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maertjkldlgk 2009-04-27
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int memory[100]; // 定义一个全局数组,用于存放每次对十进制数求余的眼前结果
int i=0; // 数组下标变量

int binary(int n)
{
memory[i++] = n % 2; //存放求余结果
if((n / 2) >1) //商数大于1时继续调用binary()
{
return binary(n / 2);
}
else if((n / 2)== 1) //商数等于1时把1存入数组,然后返回
{
memory[i]=1;
return 1;
}
else //商数等于0时把0存入数组,然后返回
{
memory[i]=0;
return 0;
}
}
int main()
{
binary(302);
for(;i>=0;i--) //输出的时候要从反向输出,就是从后边输出
{
cout<<memory[i];
}
return 0;
}

朋友,你应该先把你n%2结果保存起来,然后再把保存的结果反向输出,对结果的保存可以用一个全局数组,
也可以用栈来保存每次n%2的结果,还有啊,你的程序写得不清楚,“{”与“}”应该独占一行一列,
  • 打赏
  • 举报
回复
基础贴,收藏。。下次回答问题直接copy。哈哈
icansaymyabc 2009-04-27
  • 打赏
  • 举报
回复
不过要调整输出数据也很简单:


//逆序输出
void binary(int n){
if(n){
cout <<( n & 1);
binary( n >> 1);
}
}

//正序输出
void binary(int n){
if(n){
binary( n >> 1);
cout <<( n & 1);
}
}

调整递归和输出的秩序就可以了。
icansaymyabc 2009-04-27
  • 打赏
  • 举报
回复
楼主老兄啊!你自己做的就是对的。哈哈哈!


不信你随便拿个数字手工转成 2 进制数,和你的程序输出结果相比,你就知道你输出的结果是倒的了。
plaindew 2009-04-27
  • 打赏
  • 举报
回复
汗,刚才错了。

void binary(int n) {
if((n / 2) > 0)
binary(n / 2);

cout << (n % 2);
}
icansaymyabc 2009-04-27
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int binary(int n){
if(n){
cout <<( n & 1);
return binary( n >> 1);
}else{
return 0;
}
}

int main(){
binary(302);
}
icansaymyabc 2009-04-27
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int binary(int n){
if(n){
cout <<( n & 1);
return binary( n >> 1);
}else{
return 0;
}
}

int main(){
binary(302);
}
liliangbao 2009-04-27
  • 打赏
  • 举报
回复
int binary(int n)
{
if((n < 0)
{
return;
}
else
{
return binary(n/2);
cout << (n%2);
}
}
plaindew 2009-04-27
  • 打赏
  • 举报
回复
int binary(int n) {
if((n / 2) > 0) {
return binary(n / 2);
}
else {
cout << (n % 2);
}
}
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在C++编程中,将十进制数转换为二进制数是一项基本任务,而改进版的实现不仅支持正数,还支持负数的转换,这涉及到二进制补码的概念。以下是相关知识点的详细探讨: 二进制表示 二进制是计算机处理数据的基础,只包含0和1。每一位的权重是2的幂次,从右到左依次为2⁰、2¹、2²等。 十进制转二进制 通常使用“除2取余”法:将十进制数不断除以2,余数即为二进制的相应位,从下往上排列余数即可得到二进制表示。 负数的二进制表示 在计算机中,负数通常用二进制补码表示。补码是将正数的二进制按位取反(0变1,1变0)后加1得到的。负数的最高位(符号位)为1。 C++实现 可以使用C++的std::bitset库,也可以自定义函数,如decToBin,接收整数参数并返回其二进制字符串。通过迭代或递归实现转换。 错误处理 如果输出顺序错误,可能是处理负数补码时符号位出错,或者构建字符串时顺序颠倒。解决方法是确保符号位正确处理,并按正确顺序输出。 操作流程 检查输入是否为负数,若是,先转为正数再转换。 使用“除2取余”法存储余数。 从低到高排列余数形成二进制字符串。 若原数为负,反转字符串并添加符号位1。 代码示例 优化与测试 需要处理边界条件(如零值)并进行充分测试,确保正负数、零和大数的转换准确无误。通过编译运行程序,验证其正确性,确保输入任何数值都能得到正确的二进制结果。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧