1846: 带小数的二进制转十进制
时间限制: 1 Sec 内存限制: 128 MB
提交: 106 解决: 49
[提交] [状态] [命题人:Lili]
题目描述
输入一个带小数点的二进制数,输出其对应的十进制数。
输入
带小数点的二进制数。
输出
输出其对应的十进制数。
样例输入 Copy
1001.011
样例输出 Copy
9.375
来源/分类
小云梯
来自小云梯A第901课时
这道题主要考的就是进制转换
之前我用printf,结果爆出好多个‘0’,大家千万别用,用cout就行
#include<bits/stdc++.h>
using namespace std;
void cl(char str[],int j,int len){
int k=j+1;//指针指到k
int cetz=0,cetx=-1;//z(整数) x(小数) -->不同的运算方式
int Sumz=0;
double Sumx=0;
double ans;
for( ;j>0;j--){
Sumz+=(str[j-1]-'0')*pow(2,cetz);//作者太懒,直接用的2的平方
cetz++;
}
for( ;k<len;k++){
Sumx+=(str[k]-'0')*pow(2,cetx);
cetx--;
}
ans=Sumz+Sumx;//其实直接输出‘Sume+Sumx’也行
cout<<ans;
}
int main(){
int j,k;
char a[10001];
gets(a);//获得数组
int len=strlen(a);//获取长度
for(j=0;j<len;j++){
if(a[j]=='.')//记录'.'位置
break;
}
cl(a,j,len);
return 0;
}