为什么是40分啊,大佬求解

P5719 【深基4.例3】分类平均

hjgfshecvyua @ 2020-12-13 13:04:56

#include<stdio.h>
int main()
{
    int i,n,k,j=0;
    int sum1=0,sum2=0;
    float aver1,aver2;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        if(i>=k&&i%k==0)
        {
            sum1=sum1+i;
            j++;
        }
        else
        sum2=sum2+i;
    }
    aver1=sum1/j;
    aver2=sum2/(n-j);
    printf("%.1f %.1f",aver1,aver2);
    return 0;

 } 

by CGDGAD @ 2020-12-13 13:05:44

请用double试试。


by CGDGAD @ 2020-12-13 13:06:22

@hjgfshecvyua


by 周勋吾儿 @ 2020-12-28 22:22:02

@NSObject 为啥要用double,用float输出来就不对,求救大神


by CGDGAD @ 2020-12-29 06:45:26

@周勋吾儿 。。。

两者是不一样的,float 会有精度问题

比如你算出来了 1.145141919810,在 float 中可能会被保存成 1.14515(只是瞎举了一个例子),会有误差,但 double 精度大,不会出现这样的情况

信息学奥赛中一般使用 double,没人用 float


by CGDGAD @ 2020-12-29 06:46:52

float精度可能6位小数罢,后面就不准了


by 周勋吾儿 @ 2020-12-29 12:28:47

@NSObject 哦哦 好的,谢谢大哥了!


by poorscholar107 @ 2021-01-21 12:23:49

啊,我也是40分,感谢这个帖子


|