c++ - '.' 在输出中意味着什么?

标签 c++ algorithm

所以,我正在解决一个基本上具有以下代码的问题:

int rez,arr[10000],n,l,diff;
float f;
int main (void)
{
    cin>>n>>l;
    for (int i = 0; i < n; i++ )
    {
        cin>>arr[i];
    }
    sort(arr,arr+n);
    rez = 2*max(arr[0],l-arr[n-1]);
    for ( int i = 0; i < n-1; i++ )
    {
        rez = max(rez, arr[i+1]-arr[i]);
    }
    f = rez/2.0;
    printf("%.10f\n",f);
    return 0;
}

上面是下面问题的代码:

http://codeforces.com/problemset/problem/492/B

逻辑:按非降序对灯笼进行排序。然后我们需要找到两个相邻灯笼之间的最大距离,让它成为 maxdist。我们还需要考虑街道边界并计算从外面的灯笼到街道边界的距离,它将是 (a[0] - 0) 和 (l - a[n -⟉1])。答案将是 max(maxdist/2, max(a[0] - 0, l - a[n - 1]))

现在,上面的代码给出了一个 WA(错误答案),但是将最后一个语句修改为,

printf("%.10f\n",rez/2.);(并删除 f),我被接受了。这个 . 是什么意思,为什么当我使用额外的变量 f 时它会给出 WA?

最佳答案

.的含义如下-

让我们举个例子 int a=4; float c; 如果我们写c=a/3;那么printf("%f",c);会得到1.000000(精确到小数点后六位),如果你写printf("%.10f",c); 那么它会给出1.0000000000(精确到小数点后十位),这意味着在 printf 中写入 . 将给出精确到 之后写入的数字的有效数字。 如果我们写入 c=a/3.0 这意味着我们告诉编译器将 int 除以 float 并在此处进行隐式转换(或类型提升),编译器将 int a 视为 float 并给出输出 1.333333。因此,我们可以通过这样做获得精确的答案,直到所需的有效数字。

关于c++ - '.' 在输出中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547390/

相关文章:

algorithm - GLPK:没有原始可行解

c++ - 为什么 C++ 类需要在类范围之外定义静态字段(数据成员)?

c++ - 数组在 Visual C++ 中奇怪地存储从 GetVolumeInformation 检索到的名称?

c++ - SDL_mixer WAVE 音频格式质量差

c++ - 成员取得参数的所有权

java - 如何将字符串的所有可能排列放入数组中?

c++ - 如何快速拼接字符数组?

algorithm - 打印向量的所有排列

c# - 在列表中查找最近的 sumElement 组合

image - 图像的可训练 "Spam-Filter"