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

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);
}
...全文
1949 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);
}
}

64,637

社区成员

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

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