中兴实习=一道编程题的疑问。。。。

TandyT 2011-05-20 12:23:48
题目:用递归法,求出一个整型数对应的二进制序列!
void Int_to_Binary(unsigned long n);





//---------------------------------------

/*我只会这样写,函数返回类型时 int 类型的,可是题目的函数里,
返回值是 void 类型的,且参数是 (unsigned long n) ,
这怎么实现递归呢?请各位高手不吝赐教啊!
*/

int Int_to_Binary(unsigned long n)
{

int p=n%2;
n=n/2;

if (n==0)
{
return (1);
}
else
{
return ((Int_to_Binary(n)*10+p));
}
}
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiqing23 2011-05-24
  • 打赏
  • 举报
回复
void Int_to_Binary(unsigned long n)
{
if(n/2==0)
printf("%d",n%2);
else
{
Int_to_Binary(n/2);
printf("%d",n%2);
}
}
TandyT 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
估计题目的意思是让你直接 printf 了。
[/Quote]

就算像2楼那样 printf() 输出,那这个递归该如何实现呢?在 void Int_to_Binary(unsigned long n); 函数内部怎么实现递归?用while代替?

TandyT 2011-05-20
  • 打赏
  • 举报
回复
难道是纠结成下面这样?



int I_to_B(unsigned long n)
{

int p=n%2;
n=n/2;

if (n==0)
{
return (1);
}
else
{
return ((I_to_B(n)*10+p));
}
}


void Int_to_Binary(unsigned long n)
{
int res=I_to_B(n);
//printf("%d",I_to_B(n));
}


healer_kx 2011-05-20
  • 打赏
  • 举报
回复
估计题目的意思是让你直接 printf 了。
kyotrue 2011-05-20
  • 打赏
  • 举报
回复
让你printf吧
void I_to_B(unsigned long n, unsigned int bit)
{
if (!bit)
return;
printf("%d", n & 0x80000000 ? 1 : 0);
n <<= 1;
I_to_B(n, bit-1);
}

void Int_to_Binary(unsigned long n)
{
I_to_B(n, 32);
}
TandyT 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 visualeleven 的回复:]
C/C++ code
void Int_to_Binary(unsigned long n)
{
if(n/2 > 0)
Int_to_Binary(n/2);
printf("%d", n%2);
}

int main(int argc, char* argv[])
{
Int_to_Binary(12345);
print……
[/Quote]

想法很巧,不过,这样每次printf 的话,岂不是不能把这个二进制的序列存储起来?只是依次打印每个位上的数。

另一方面,你的这种方法很好,不会造成溢出,而我在2楼的这种递归,有可能导致溢出的吧。

也不知道到底这题目要考的是什么,谢谢大家的指点。
TandyT 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 x2010072710 的回复:]
有这么一个程序,用的是vc,也是二进制输出的,你看看和你的要求一样不一样:
#include<stdio.h>
#include<math.h>
void main()
{
int i=0,n,j,a[20],b[20],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
printf("请输入……
[/Quote]

要的是递归,不是这个
用户 昵称 2011-05-20
  • 打赏
  • 举报
回复
5楼的,你的代码好像跟楼主要求的不一样。
x2010072710 2011-05-20
  • 打赏
  • 举报
回复
有这么一个程序,用的是vc,也是二进制输出的,你看看和你的要求一样不一样:
#include<stdio.h>
#include<math.h>
void main()
{
int i=0,n,j,a[20],b[20],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
printf("请输入要转换成的进制(1<N<=16):");
scanf("%d",&n);
if(x<0)
m=fabs(x);
else
m=x;
k=(int)m;//强制类型转换,可以使用k=(int)m;代替,从而更加的一目了然
while(k)//判定需要转换的数是否变为0
{
a[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反
k/=n;//转换一位之后进行相应的变化
}
if(m!=(int)m)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
d=m-(int)m;//取小数部分
while(d!=0)
{
b[c]=(int)(d*n);//算法为×N取整
d=d*n-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
}
}
printf("转换结果为:");
if(x<0)
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
if(a[j]==10)
printf("A");
else
if(a[j]==11)
printf("B");
else
if(a[j]==12)
printf("C");
else
if(a[j]==13)
printf("D");
else
if(a[j]==14)
printf("E");
else
if(a[j]==15)
printf("F");
else
printf("%d",a[j]);
}
if(m!=(int)m)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j<c;j++)//正序输出
{
if(b[j]==10)
printf("A");
else
if(b[j]==11)
printf("B");
else
if(b[j]==12)
printf("C");
else
if(b[j]==13)
printf("D");
else
if(b[j]==14)
printf("E");
else
if(b[j]==15)
printf("F");
else
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
printf("\n");//输出换行,以使程序的输出结果美观
}
Eleven 2011-05-20
  • 打赏
  • 举报
回复
void Int_to_Binary(unsigned long n)
{
if(n/2 > 0)
Int_to_Binary(n/2);
printf("%d", n%2);
}

int main(int argc, char* argv[])
{
Int_to_Binary(12345);
printf("\n");
return 0;
}

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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