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

求教二进制转十进制

lxldcr 发布于 2019-06-19 12:34, 3452 次点击
题目很简单,就是把一个二进制数转换为十进制数,然后输出。
Input Description
多组测试数据,第一行一个正整数 n (n<=1000),表示后面有 n 组测试数据,每组一行。
接下来有 n 行,每行为一个不超过32位的二进制数。
Output Description
对每组测试数据,在一行中输出对应的十进制数。
Sample Input
2
0111
1111
Sample Output
7
15
我的代码运行正确,但提交错误,谁能帮我指一下错误
#include <stdio.h>

int main(void)
{
    int n;
    int a,b;
    int p,i;
    int add,c;

  scanf("%d",&c);
  for(i=0;i<c;i++)
  {
      scanf("%d",&n);
      b=1;
      add=0;

       while(n!=0){
        a=n%10;
        p=a*b;
        b*=2;
        n=n/10;
        add=add+p;
    }

    printf("%d\n",add);
  }




    return 0;
}
8 回复
#2
rjsp2019-06-19 13:16
每行为一个不超过32位的二进制数
那如果输入 11111111111111111111111111111111 的话,应该输出 4294967295,还是 -1 ? 你的程序又输出是什么?



[此贴子已经被作者于2019-6-19 13:18编辑过]

#3
rjsp2019-06-19 13:22
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    while( n-- )
    {
        char buf[33];
        scanf( "%s", buf );

        unsigned dec = 0;
        for( char* p=buf; *p; ++p )
            dec = dec*2 + (*p-'0');

        printf( "%u\n", dec );
    }
}
#4
lxldcr2019-06-19 14:37
回复 3楼 rjsp
运行正确,但提交代码后答案错误
#5
lxldcr2019-06-19 14:43
回复 2楼 rjsp
输入32个1后输出的居然是–3457
#6
孤独城堡2019-06-19 15:13
C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。
32个1已经超出int的范围
#7
lin51616782019-06-19 18:14
以下是引用孤独城堡在2019-6-19 15:13:36的发言:

C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。
32个1已经超出int的范围

32个1没有超出int的范围
#8
zbjzbj2019-06-19 20:23
这个组的概念怎么理解?为什么是n组测试数据,而不是n个测试数据?
#9
孤独城堡2019-06-19 23:30
int的范围是-2147483648~+2147483647,只有10位数,你32个1是32位数,肯定超出了
1