Я пытаюсь решить проблему timus reverse root (1001) и сталкиваюсь со следующей проблемой - PullRequest
0 голосов
/ 05 апреля 2020
#include <iostream> 
#include <cmath>

double buf[128 * 1024];
int main()
{
    int i = 0;
    unsigned long long n; // 64-bit unsigned integer
    while (std::cin>>n) {
        buf[i ++] = double(sqrt(n)); // store in buffer
    }
    i--;
    while(i>=0){
        printf("%lf\n",buf[i]); // When i am using this it works fine.
        //std::cout<<buf[i]<<std::endl; // When i am using this line instead of printf function it shows wrong answer. why?
        i--;
}


    return 0;
}

Я скомпилировал его с помощью G ++. Пока я пытаюсь напечатать вывод с помощью функции printf , он принимается . Но когда я использую функцию cout , тогда он дает неправильный ответ . Почему это случилось? Этот код показывает ошибку компиляции, когда я компилирую его в GCC7.1. В чем причина этого? Ссылка на проблему: https://acm.timus.ru/problem.aspx?space=1&num=1001

1 Ответ

2 голосов
/ 05 апреля 2020

Используя оператор << с std::cout, округляет до 6 значащие цифры по умолчанию и использует научную нотацию c для больших чисел с плавающей запятой. Чтобы отключить научную нотацию c, включите заголовок <iomanip> и используйте std::cout << std::fixed << buf[i];. Использование std::fixed также установит округление до 6 цифр после десятичной точки .

...