Есть ли более быстрый способ решить эту проблему? - PullRequest
0 голосов
/ 10 апреля 2020

Напишите и протестируйте свою собственную двойную функцию 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, но кода много. Есть ли более быстрый способ решить это упражнение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...