Напишите и протестируйте свою собственную двойную функцию ab c (char * b) в программе, взяв в виде строки дробное двоичное число вида "1101.101" и вернув ему равное десятичное число (здесь 1 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 + 1 * 2 ^ -1 + 0 * 2 ^ -2 + 1 * 2 ^ -3 = 8 + 4 + 0 + 1 + 0,5 + 0 + 0,125 = 13,625). Функция должна возвращать специальное значение -1, если введено неправильное двоичное двоичное число (например, содержащее другое число git, отличное от 0, 1 или более одного периода '.').
My Решение:
#include <iostream>
#include <cmath>
using namespace std;
double abc(char* b);
int main() {
cout << abc("1101.101");
return 0;
}
double abc(char* b){
int i = 0;
int a = 0;
int dot = 0;
double sum=0;
int c = 0;
do{
if ((b[a]=='1')||(b[a]=='0')||(b[a]=='.')){
a++;
if(b[a]=='.'){
dot++;
}
if(dot==2){
return -1;
}
} else {
return -1;
}
} while(b[a]!='\0');
while(b[i]!='.'){
i++;
}
while(i!=0) {
if(b[c]=='1'){
sum = sum + pow (2, i-1);
}
c++;
i--;
}
while(b[i]!='.'){
i++;
}
if(b[i]=='.'){
int m = 0;
while(b[i]!='\0'){
if(b[i]=='1'){
sum = sum + pow (2, m);
}
m = m - 1;
i++;
}
}
return sum;
}
Проблема: Все хорошо, дает 13,625, но кода много. Есть ли более быстрый способ решить это упражнение?