求教二进制转十进制

学计算机的小白 2019-06-19 11:32:55
题目很简单,就是把一个二进制数转换为十进制数,然后输出。
Input Description
多组测试数据,第一行一个正整数 n (n<=1000),表示后面有 n 组测试数据,每组一行。
接下来有 n 行,每行为一个不超过32位的二进制数。
Output Description
对每组测试数据,在一行中输出对应的十进制数。
Sample Input
2
0111
1111
Sample Output
7
15
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 Italink的回复:
[quote=引用 5 楼 自信男孩 的回复:]
scanf("%s", &t);这个是不是应该去掉&

我不知道欸,我只会用C语言的IO,但是却没有仔细研究过=.=
我之前发现这个问题,scanf对于数组,取不取地址都能用,干脆就都取了地址,方便统一的记=.=
请问这样做是错的吗?

[/quote] 数组用不用&都行,你的代码已经正确了
  • 打赏
  • 举报
回复
引用 5 楼 自信男孩的回复:
[quote=引用 4 楼 Italink 的回复:]
32位超出了int的数据范围,改用char*

#include<stdio.h>
#include<string.h>
int main() {
int n, j, i, k, sum;
char t[35];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", &t);
k = 1;
sum = 0;
for (j = strlen(t)-1; j >= 0; j--) {
sum += (t[j] - '0') * k;
k <<= 1; //等价k*=2
}
printf("%d\n", sum);
}
return 0;
}


scanf("%s", &t);这个是不是应该去掉&[/quote] 要不要&都行的,他的代码正确了
Italink 2019-06-19
  • 打赏
  • 举报
回复
引用 5 楼 自信男孩 的回复:
scanf("%s", &t);这个是不是应该去掉&

我不知道欸,我只会用C语言的IO,但是却没有仔细研究过=.=
我之前发现这个问题,scanf对于数组,取不取地址都能用,干脆就都取了地址,方便统一的记=.=
请问这样做是错的吗?

自信男孩 2019-06-19
  • 打赏
  • 举报
回复
引用 4 楼 Italink 的回复:
32位超出了int的数据范围,改用char*

#include<stdio.h>
#include<string.h>
int main() {
int n, j, i, k, sum;
char t[35];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", &t);
k = 1;
sum = 0;
for (j = strlen(t)-1; j >= 0; j--) {
sum += (t[j] - '0') * k;
k <<= 1; //等价k*=2
}
printf("%d\n", sum);
}
return 0;
}


scanf("%s", &t);这个是不是应该去掉&
Italink 2019-06-19
  • 打赏
  • 举报
回复
32位超出了int的数据范围,改用char*

#include<stdio.h>
#include<string.h>
int main() {
int n, j, i, k, sum;
char t[35];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", &t);
k = 1;
sum = 0;
for (j = strlen(t)-1; j >= 0; j--) {
sum += (t[j] - '0') * k;
k <<= 1; //等价k*=2
}
printf("%d\n", sum);
}
return 0;
}

  • 打赏
  • 举报
回复
引用 1 楼 Italink的回复:
搞清进制的转换机制,很容易就能写出代码

#include <iostream>
#include<stdio.h>
int main() {
int n, t, i, k, sum;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &t);
k = 1;
sum = 0;
while (t) {
sum += (t % 10) * k;
k <<= 1; //等价k*=2
t /= 10;
}
printf("%d\n", sum);
}
return 0;
}
我提交代码到系统后答案错误了
  • 打赏
  • 举报
回复
引用 1 楼 Italink的回复:
搞清进制的转换机制,很容易就能写出代码

#include <iostream>
#include<stdio.h>
int main() {
int n, t, i, k, sum;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &t);
k = 1;
sum = 0;
while (t) {
sum += (t % 10) * k;
k <<= 1; //等价k*=2
t /= 10;
}
printf("%d\n", sum);
}
return 0;
}
你这也太及时了,,怎么连表情包都是猿
Italink 2019-06-19
  • 打赏
  • 举报
回复
搞清进制的转换机制,很容易就能写出代码

#include <iostream>
#include<stdio.h>
int main() {
int n, t, i, k, sum;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &t);
k = 1;
sum = 0;
while (t) {
sum += (t % 10) * k;
k <<= 1; //等价k*=2
t /= 10;
}
printf("%d\n", sum);
}
return 0;
}

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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