C语言,利用函数实现将二进制数转化为十进制数并实现相加。

//设计一函数可以将一个2进制的字符串转换为10进制整数,并利用此函数计算从键盘输入的两个2进制数的和。谢谢大神们了。... //设计一函数可以将一个2进制的字符串转换为10进制整数,并利用此函数计算从键盘输入的两个2进制数的和。
谢谢大神们了。
展开
 我来答
tattackor
2015-10-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:873万
展开全部

1、2进制10进制的转换方法:
二进制数1101转十进制
1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13
附加一个八进制转十进制的例子吧:
507(八进制转10进制):
5×8的2次幂+0×8的1次幂+7×8的0次幂=
5×64+0×8+7×1=327(10进制)

2、例程:

#include "stdio.h"
double BtoD(char B[])
{
    double d=0;//转为十进制数的中间结果变量
    int i=0;    //当前求到了二进制数的位置
    while(B[i++]!='\0')//当没有到二进制数结束时,一直循环
    {
        d=d*2+B[i-1]-'0'; //求出每个二进制位的位权(从高位到低位,所以每求一位,先前的都应变为原来的2倍),累加到中间结果
    }
    return d;//返回最终结果
}
int main()
{
    char b1[20],b2[20];//定义两个二进制数字符串
    scanf("%s %s",b1,b2);//输入两个字符串
    printf("%.0lf",BtoD(b1)+BtoD(b2));//输出两个二进制数转为十进制数后的和
}
百度网友f3b3e02
2014-12-04 · TA获得超过2156个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:578万
展开全部
#include "stdio.h"
double BtoD(char B[])
{
double d=0;
int i=0;
while(B[i++]!='\0')
{
d=d*2+B[i-1]-'0';
}
return d;
}
int main()
{
char b1[20],b2[20];
scanf("%s %s",b1,b2);
printf("%.0lf",BtoD(b1)+BtoD(b2));
}
追问
全注释一下好吗?
追答
#include "stdio.h"
double BtoD(char B[])
{
    double d=0;//转为十进制数的中间结果变量
    int i=0;    //当前求到了二进制数的位置
    while(B[i++]!='\0')//当没有到二进制数结束时,一直循环
    {
        d=d*2+B[i-1]-'0'; //求出每个二进制位的位权(从高位到低位,所以每求一位,先前的都应变为原来的2倍),累加到中间结果
    }
    return d;//返回最终结果
}
int main()
{
    char b1[20],b2[20];//定义两个二进制数字符串
    scanf("%s %s",b1,b2);//输入两个字符串
    printf("%.0lf",BtoD(b1)+BtoD(b2));//输出两个二进制数转为十进制数后的和
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bignode
2014-12-04 · TA获得超过2664个赞
知道大有可为答主
回答量:1427
采纳率:75%
帮助的人:536万
展开全部
#include <stdio.h>

int binstr2dec( char * s)
{
    int n = 0;
    while ( *s != '\0')
    {
        n<<=2;
        if( *s++ =='1')
            n += 1;
    }
    return n;
};

int main()
{
    char b1[32] ;//= "1010101";
    char b2[32] ;//= "100101";
    gets( b1 );
    gets( b2 );
    int sum = binstr2dec(b1) + binstr2dec(b2);
    printf("sum = %d",sum);
    return 0;
}
追问
全注释一下好吗?
追答
#include <stdio.h>
 
int binstr2dec( char * s)
{
    int n = 0;           //保存转换结果的目标数字
                         //转换方法:采用从高位到低位逐位转换的方法
                         //如尚有未转换位,则目标数字左移一位,再加上被转换位
                         //直到所有位处理完成.
                         //如1 0 1 0 0 1 0
                         //   处理方向----->
           //第一位是1 , 目标数字表示为二进制是 0; 目标左移一位,加1 变为 1
           //第二位是0 , 目标左移一位,加0 变为 1 0
           //第三位是1 , 目标左移一位,加1 变为 1 0 1
           //第四位是0 , 目标左移一位,加0 变为 1 0 1 0
           //直到 最后一位,目标左移一位,加0 变为 1 0 1 0 0 1 0
           //转换完成 ,返回 目标数字
    while ( *s != '\0')  //如果未到二进制字符串结尾
    {
        n<<=1;          //目标数字左移一位,上面程序这打错了
        if( *s++ =='1') // 如果当前位是1
            n += 1;     // 加上当前被转换位数字(0可以不加)
    }
    return n;      //返回
};
 
int main()
{
    char b1[32] ;//= "1010101";
    char b2[32] ;//= "100101";
    gets( b1 );   //输入第一个二进制字符串
    gets( b2 );   //输入第二个二进制字符串
    int sum = binstr2dec(b1) + binstr2dec(b2); //调用函数转换,并运算
    printf("sum = %d",sum);         //输出结果
    return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
将来的大神
2014-12-04 · 超过10用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:41万
展开全部
#include <stdio.h>
#include <stdlib.h>
#define N 16

int main(int argc, char *argv[])
{int a[N],i,n,j;
scanf("%d",&n);
for(i=15;i>=0;i--)
{a[i]=n%2;
n=n/2;
}
for(j=0;j<N;j++)
{printf("%d",a[j]);
}
printf("\n");
system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式