鱼C论坛

 找回密码
 立即注册
查看: 619|回复: 6

[已解决]十进制转换为二进制

[复制链接]
发表于 2020-5-4 21:01:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
很奇怪代码的运行结果,就比如输入"12",结果却是“1110”,是哪里出问题了呀【捂脸】
  1. #include<stdio.h>
  2. void dec2bin(int m)
  3. {
  4.         int bin[32],j;
  5.         for(j=0;m!=0;j++)
  6.         {
  7.                 bin[j]=m%2;
  8.                 m=m/2;
  9.         }
  10.         for(;j!=0;j--)
  11.                 printf("%d",bin[j]);
  12. }

  13. int main()
  14. {
  15.         int n;
  16.         scanf("%d",&n);
  17.         dec2bin(n);
  18.         return 0;
  19. }
复制代码
最佳答案
2020-5-4 21:13:56
  1. #include<stdio.h>
  2. void dec2bin(int m)
  3. {
  4.         int bin[32],j;
  5.         for(j=0;m!=0;j++)
  6.         {
  7.                 bin[j]=m%2;
  8.                 m=m/2;
  9.         }
  10.         for(--j;j>=0;j--)
  11.                 printf("%d",bin[j]);
  12. }

  13. int main()
  14. {
  15.         int n;
  16.         scanf("%d",&n);
  17.         dec2bin(n);
  18.         return 0;
  19. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-4 21:13:56 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. void dec2bin(int m)
  3. {
  4.         int bin[32],j;
  5.         for(j=0;m!=0;j++)
  6.         {
  7.                 bin[j]=m%2;
  8.                 m=m/2;
  9.         }
  10.         for(--j;j>=0;j--)
  11.                 printf("%d",bin[j]);
  12. }

  13. int main()
  14. {
  15.         int n;
  16.         scanf("%d",&n);
  17.         dec2bin(n);
  18.         return 0;
  19. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-4 21:34:06 | 显示全部楼层

可以了!!好厉害!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 07:26:42 From FishC Mobile | 显示全部楼层
逻辑:
2作为const来求模,得到任意数是否可以整除,如果能整除,求模结果则为0,如果不能整除,求模结果则为余数,因为除数为2,所以任意数除以2,余数只能为几呢?
突然发现这个问题好难,就去翻书,请教小学生,发现如下:2分之0。。。。到2分之n。
0/2=0*1/2 =0 0乘以任意数得0,所以0/2没有余数,求模结果为0。

1/2=1*1/2 =0.5=1/2 1乘以任意数得任意数,1/2是0.5由于是int类型,所以结果为0,但这里是求模,有余数为0.5,所以没有被整除,结果不足1,需要上机实验,证实求模结果为0还是为1。

2/2=2*1/2=2/2=1 2除以2可以整除,结果为1,已整除,没有余数,所以求模结果为0

3/2=3*1/2=3/2=1.5 没有被整除,模为1

4....为0

5....为1

6....为0
....
直到n
n/2=n*1/2
综上所述,依次类推,得出如果n的尾数是一个偶数,那么必定可以被2整除,所以没有余数,所以模结果为0

奇数的话,除法结果为0.5或者1.xxxx
总之,有余数,且余数结果为不足1或2以内的余数:
0.5和1.xxxx
所以作为int,以上两种情况,其商的结果,只有0.5需要上机证实外,其他结果,只能为1,小球部分被四舍五入还是直接抛弃需要上机实验。

所以,正是奇数可以被 二进制的权评论数 整除吗?
不能的话,余数是多少呢,综上所述,余数是介于0-1.xxx之间。求模的本质是得到余数,int不能带有小数,float可以带有小数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 11:06:41 | 显示全部楼层
howzyao 发表于 2020-5-5 07:26
逻辑:
2作为const来求模,得到任意数是否可以整除,如果能整除,求模结果则为0,如果不能整除,求模结果则 ...

受教了,谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 11:10:24 | 显示全部楼层
厉害了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 12:00:35 | 显示全部楼层
后来我老师看了我原来写的代码说,因为上一个循环结束时对应的j数组元素没有存放值,0--j-1对应的数组元素存放值了,第二个循环做了次j-1,就正正好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 01:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表