Написать программу для определения первой цифры дробной записи в значении выражения

Написать программу для определения первой цифры дробной записи в значении выражения


Ответы (1 шт):

Автор решения: Leonid

Только начинаю писать на C++. Буду предельно признателен за любые замечания.

#include <iostream>

int main()
{
    double number = 0.987 * 2.768 + 345.0;
    std::string string = std::to_string(number);
    bool isDot = false;

    for(char letter : string){
        if(isDot){
            std::cout << "The first number in result of expression (" << string << ") is " << letter << std::endl;
            break;
        }
        if(letter == '.'){
            isDot = true;
        }
    }
}

// The first number in result of expression (347.732016) is 7

Есть предложение выделить дробную часть числа, умножить ее на десять и получить целую часть. К сожалению, %1.0 не работает, поэтому так:

#include <iostream>
#include <cmath>

int main()
{
    double number = 0.987 * 28.168 - 345.0;
    std::cout << "The number is " << number << std::endl;
    std::cout << abs(static_cast<char>((number - static_cast<long long>(number))*10));
}
//The number is -317.198
//1

Еще можно регулярные выражения подключить. (В С++ оказывается с ними так комфортно работать!):

#include <iostream>
#include <regex>

int main()
{
    double number = 0.987 * 268.7168 - 345.0;

    std::regex pattern("[.]([0-9])");
    std::smatch m{};
    std::string str{std::to_string(number)};
    std::regex_search(str, m, pattern);

    std::cout << str << std::endl;
    std::cout << m[1];
}
// -79.776518
// 7

Продолжая работать со строками:

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    double number = 0.987 * 268.7468 - 345.0;
    string str = to_string(number);
    
    cout << str << endl;
    cout << str[str.find('.') + 1];
}

// -79.746908
// 7
→ Ссылка