我正在尝试解决Timus Reverse root(1001)问题并面临以下问题

时间:2020-04-04 22:50:06

标签: c++ arrays root reverse

#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 个答案:

答案 0 :(得分:2)

默认情况下,将<<的{​​{1}}运算符四舍五入为6个有效数字,并对大浮点数使用科学计数法。要禁用科学计数法,请包含std::cout标头并使用<iomanip>。使用std::cout << std::fixed << buf[i];还将舍入到小数点后 的6位数字。