C语言二级程序题(1)二进制转10进制

函数fun的功能是将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制整数值返回。该串长度最大不超过15

例如,若表示二进制数的字符串为: "10011”, 则运行结果应为: 10011- ->19

根据题目可以提出以下重点:

1.由题目可知该题为进制转换题有二进制转为10进制;

2.输入的字符只能是'0'或'1';

3.长度最大不能超过15;
思路:建立一个15位的字符串,进入fun先判断输入的字符串有几位(使用strlen 测试字符串长度函数)在判断是不是有‘0’或‘1’组成的,如果是继续判断,不是则退出。

如果是则进入循环 b[i]-'0' 由于b为字符与数值进行运算时会转为acsll值,所以减去一个'0'可以转换为数值。

#include <stdio.h>
#include <string.h>

int fun(char *b) {
    int len = strlen(b);
    int he = 0;
    int cifang = 1; // 初始化2的0次方为1

    // 先计算2的(length-1)次方,然后从高位到低位遍历字符串
   for(i=0;i<len;i++){
		if(b[i]=='0'||b[i]=='1'){              //条件2
    for (int i = len - 1; i >= 0; i--) {        
        he += (b[i] - '0') * cifang;
        cifang *= 2; // 每次乘以2以得到下一个更高的幂次
    }

    return he;
		}
		else printf("输入错误");
			return 0;
	}
}
int main() {
    char a[16];
    printf("请输入一个二进制数(长度不超过15):");
    scanf("%15s", a);                           //条件3

    int jg = fun(a);
    printf("十进制值为:%d\n", jg);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值