大一上学期计算机科学导论的一次作业

本文详细介绍了如何使用C语言编写程序,首先将用户输入的二进制字符串转换为十进制数,然后运用二分查找法将其转换回等值的二进制表示。同时,解释了程序执行过程,并以77为例演示查找步骤。解决编码问题后,代码展示了如何处理中文乱码。
摘要由CSDN通过智能技术生成

用C语言编写一个程序,将字符串形式输入的二进制整数转换为对应的十进制数,
 * 然后用二分查找法的思想将这个十进制数转换为对应的二进制数并输出。
 * 并说明计算机系统执行该程序的过程。
 * (提示:假如需要转换的十进制数是77,
 * 则需要在0-127的区间中查找77,查找过程中可以通过对77和区间中间数的比较
 * 结果确定对应的二进制数的最高位的值和下一次查找的区间范围,以此类推。)

大一编程新手,甚至不是很能理解怎么用二分查找的思想!

原本是想要输出一个“十进制数是:”结果出现了中文乱码,网上查后发现是编码格式错误,要将UTF-8改为ANSI

 

 

代码实现:

#include <stdio.h>
#include<string.h>
#include<math.h>
int ZH(int a,int*b)
{
    int i=0;
    while(1)
    {
        b[i]=a%2;
        a=a/2;
        if(a==0)
            break;
        else
        {
            ++i;
            continue;
        }

    }
    return i;
}
int main() {
    char a[100];
    int b[100];
    int sum,i,n;
    sum=0;
    gets(a);
    n=strlen(a);
    for(i=0;i<n;i++)
    {
        b[n-1-i]=(int)a[i]-48;
        sum=sum+b[n-1-i]*pow(2.0,(double)(n-1-i));

    }
    /*sum的值即为十进制数的值*/
    int c,d[1000],p;
    c=(int)sum;
    p=ZH(c,d);
    for(int j=p; j>=0; --j) {
        printf("%d", b[j]);
    }


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值