c++ 二进制转十进制

C++二进制转十进制啊。~最好能解说一下。。我比较头疼。我的思路应该是输入二进制的数然后倒过来~依次乘2的次方~~然后相加;不知道思路对吗~?麻烦大师给点提示。。。谢谢。... C++ 二进制转十进制啊。~
最好能解说一下。。我比较头疼。
我的思路应该是输入二进制的数 然后倒过来~
依次乘2的次方~~然后相加;不知道思路对吗~?

麻烦大师 给点提示。。。谢谢。我是新手。我刚学 ~
展开
 我来答
剧佛rN
2011-11-02 · TA获得超过652个赞
知道答主
回答量:95
采纳率:0%
帮助的人:135万
展开全部
这个问题很基础,先给你说说思路,然后再告诉你代码。

首先,输入一个字符串。由于一般整数int类型为4个字节,32位。所以要求输入的字符串不能超过32位,超过了的话,在程序中就无法显示出来了。

其次,判定字符串的长度(可以用strlen(),也可以用别的方式),加入字符串长度为i。

从字符串第一位开始判定,如果字符第j位是"1"则加一个2的i-j次方。比如0101的字符长度为4,第二位为"1"则加上2的(4-2)次方=4,第四位为"1",则加上2的(4-4)次方=1.最后加起来就等于4+1=5

其实,这里只提供了一部分,真正完全的二进制转十进制还要考虑第一位是"0"还是"1"以决定十进制是正是负。先给不考虑负数的二进制转十进制代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int binary_to_decimal(const char a[])
{
int i=0,k=0,sum=0;
while(a[i++]!='\0')
{i++;}
i--; //判定字符串长度

if(i>32) //当超过32位整数最大的范围时,报错
{
printf("超过32位整数的范围");
return 0;
}
else
for(int j=i;j>0;j--)
{
if(a[k++]=='1')
sum+=(int)pow(2,j-1);
}

return sum;
}

void main()
{

char a[]="0101";
printf("%d\n",binary_to_decimal(a));

}
haolizhong4924
2011-11-02 · TA获得超过5217个赞
知道小有建树答主
回答量:600
采纳率:50%
帮助的人:261万
展开全部
关键是二进制形式输入。至于“转十进制”如何转就不用考虑了,因为输出语句会自动转的。

下面这个算法是直接从键盘输入的。输入一串01字符串,开头可以有负号,中间也可以有小数点,遇到其他字符(包括空格、回车等等)就算结束。
该算法的结果是double型。
然后你在主程序中用printf("%lf",bi_input());就可以按十进制输出了。

double bi_input()
{
double x=0.0,y=1.0;
int f=1,flag=0;
while(flag!=3)
{
switch(flag)
{ case 0: switch(getchar()) /* flag==0:第一个字符,可以是负号或小数点,也可以是0或1 */
{ case '1': flag=1;x=1; break;
case '0': flag=1; break;
case '-': flag=1;f=-1; break;
case '.': flag=2; break;
default: flag=3; /* 遇非法字符(包括回车)结束输入 */
}
break;
case 1: switch(getchar()) /* flag==1:整数部分,可以是0或1,也可以是小数点 */
{ case '1': x=x*2+1;break;
case '0': x=x*2;break;
case '.': flag=2; break;
default: flag=3; /* 遇非法字符(包括回车)结束输入 */
}
break;
case 2: y=y/2; /* flag==2:小数部分,可以是0或1 */
switch(getchar())
{ case '1': x+=y;break;
case '0': break;
default: flag=3; /* 遇非法字符(包括回车)结束输入 */
}
}
}
return(x*f);
}
【说明】
上述算法中各变量说明:
x是已经输入部分的绝对值,f是正负号。y是当前小数位的单位值。
flag是状态标志:0——处理首字符;1——处理整数部分;2——处理小数部分;3——结束输入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式