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

二进制数据转换成十进制数

裂地劈龙 发布于 2019-12-11 19:45, 5815 次点击
输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出。

输入格式:
输入1个二进制数串(至少1位且不超过16位)。

输出格式:
输出转换后的十进制数。

输入样例:
0110110001100
输出样例:
3468


只用数组,不要用函数做
5 回复
#2
纯蓝之刃2019-12-11 20:37
#include<stdio.h>
#include<math.h>

int main()
{
    int n=0,sum=0;
    char a[16]={0};

    printf("请输入二进制数据:");
    while((a[n++]=getchar())!='\n');
    for(int i=n-2;i>=0;i--)
        sum+=(a[i]-'0')*(int)pow(2,n-2-i);

    printf("转换后的十进制数:%d",sum);
    return 0;
}
#3
自学的数学2019-12-11 21:16
#include <stdio.h>
long int btd(char *s) /*将以字符串形式存储在s地址中的二进制数字转换为对应的十进制数字*/
{
long int rt=0;
int i,n=0;
while (s[n]) n++;
for (--n,i=n; i>=0; i--)
rt|=(s[i]-48)<<n-i;
return rt;
}
int main(int argc, char* argv[])
{
printf("%ld",btd("11100"));/*示例,输出11011B的十进制形式*/
return 0;
}
#4
裂地劈龙2019-12-12 17:02
回复 2楼 纯蓝之刃
请问为什么a[i]要-'0'呢,删去为什么是错的呢
#5
rjsp2019-12-13 08:48
替 纯蓝之刃 回答
因为 getchar() 获得的是 '0'、'1'、'2'、'3'、……
而参与计算时想要的是 0、1、2、3、……

在 asc码 中,'0'、'1'、'2'、'3'、…… 等是连在一起的,所以都减去'0'就能得到 0、1、2、3、……
#6
赵水蛇2020-01-01 15:32
回复 2楼 纯蓝之刃
i=n-2是为什么呢
1