注册 登录
编程论坛 C语言论坛

小白请教,十进制转二进制

水11 发布于 2020-05-22 08:12, 3457 次点击
这是我的程序
#include <stdio.h>
#define N 1000
int  main(){
    int abc[N];
    int a,b,i=0;
    scanf("%d",&a);
    for(;a>0;)
  {
  b=a%2;
   a=a/2;
  abc[N]=b;
  i++;
}
for(i=i-1;i>=0;i--)
  {
      printf("%d",abc[i]);
  }
}
输入10,输出来却是这样的,没搞懂为啥
只有本站会员才能查看附件,请 登录

12 回复
#2
rjsp2020-05-22 08:39
题目是什么你总得贴一下吧,从代码猜题目要求那是瞎扯
比如,
int a,b,i=0;
scanf("%d",&a);
那我该猜 题目要求你考虑负数?

比如
#define N 1000
int abc[N];
那我该猜 题目规定结果不超过100bits而非规定输入不超过unsigned?
#3
forever742020-05-22 08:47
abc[N]=b;
may be
abc[i]=b;
#4
水112020-05-22 10:10
回复 2楼 rjsp
题目给的就是说10进制转2进制,没有其他要求.
#5
水112020-05-22 10:19
回复 3楼 forever74
改了后对了,可是为什么abc[N]=b不对?
#6
forever742020-05-22 10:40
以下是引用水11在2020-5-22 10:19:06的发言:

改了后对了,可是为什么abc[N]=b不对?


你要这么问的话,我就不得不从社会主义核心价值观说起了。
话说你真的要这么问么?
#7
水112020-05-22 10:47
回复 6楼 forever74
??这跟社会主义核心价值观有什么关系?
#8
MangooDD2020-05-22 11:06
回复 5楼 水11
你要将不同的数存入数组不同的位置,而N没有变化,而你只执行了i++
#9
水112020-05-22 11:14
回复 8楼 MangooDD
ok,懂了,感谢。
#10
adssc2020-05-22 11:47
程序代码:
#include <stdio.h>
#include <stdlib.h>

void change10_2(int n)
{
    if (n == 0)
        return;
    else
    {
        change10_2(n / 2);
        printf("%d", n % 2);
    }
}

int main()
{
    int n,answer;
    printf("input:");
    scanf("%d",&n);
    answer=abs(n);
    change10_2(answer);
    printf("\n");
    return 0;
}
#11
forever742020-05-22 12:09
以下是引用水11在2020-5-22 10:47:16的发言:

??这跟社会主义核心价值观有什么关系?


首先呢,abc[N],也就是abc[1000]这个东西不存在,这个数组的合法下标范围显然是0到999。
于是下标1000是非法的,这是对“法治”的明目张胆的威胁啊。

其次,代码坚持往同一个地方写入内容,让它(这个地方)吃撑了;却要从另外一系列没有写入内容的单元读出内容,
那么,说好的“公正”呢?开小差了吗?

最后,上面都是开玩笑的,请勿在意,我们以“和谐”为主。
#12
水112020-05-22 14:02
回复 11楼 forever74
感谢教导。
#13
吹水佬2020-05-22 14:41
只有本站会员才能查看附件,请 登录

#include <stdio.h>
#include <limits.h>

void dec_bin(int a)
{
    int i;
    printf("DEC: %d\tBIN: ",a);
    for (i=sizeof(int)*CHAR_BIT-1; i>0; --i)
        printf("%d",(a>>i)&1);
    printf("%d\n",a&1);
}

int main(void)
{
    int i,a;
    //scanf("%u",&a);
    for (a=0; a<0x10; ++a)
        dec_bin(a);
    return 0;
}
1