Написать программу для определения первой цифры дробной записи в значении выражения
Написать программу для определения первой цифры дробной записи в значении выражения
Ответы (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