Я пытаюсь прочитать два числа и отобразить абсолютную разницу между ними. Числа становятся смехотворно большими, поэтому мне пришлось переключиться с LONG на LONG DOUBLE и просто отобразить их с точностью до 0 на десятичной дроби. Моя проблема заключается в том, что с номером, указанным в теме, когда я сканирую его в длинный двойник из строки c_str либо в процессе сканирования, последняя цифра сбрасывается, либо, скорее всего, отображение длинного двойника сбрасывает его.
9223372036854775807 - 1 должен быть 9223372036854775806, но вместо этого он отображает 9223372036854775800, и когда я перестаю проверять длинный дубль с 9223372036854775807, он просто показывает мне «9.2233720368547758e + 018" * 100
Я бы свалил все это на 2-битный процессор, но на 64-битном он все еще печатает неправильный ответ. У кого-нибудь есть способ сохранить весь номер?
мои включения лишены символов, которые, похоже, мешали анализатору html.
#include iostream
#include string
#include math.h
using namespace std;
int main () {
string line;
std::getline(std::cin, line);
while ( std::cin )
{
long double n, m, o;
sscanf ((char *)line.c_str(),"%Lf %Lf",&n, &m);
if(n>=m)
{
o = n - m;
}
else
{
o = m-n;
}
char buffer[100000];
sprintf( buffer , "%0.0Lf\0", o);
cout << buffer << endl;
std::getline(std::cin, line);
}
return 0;
}