求助大佬为什么累加器也要double才能过

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

Domoo @ 2023-05-11 00:55:40

以下贴的是AC代码,原来的是第6行sum1和sum2定义成int型只有40分,改成double型就过了,请问这是为什么捏(´▽`) 就算是double类型不也是0吗,有什么区别呀

希望懂得的大佬可以解答一下,感谢orz!

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n, k, cnt1 = 0, cnt2 = 0;
    double sum1 = 0, sum2 = 0, A, B;
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
    {
        if(i % k == 0)
        {
            sum1 += i;
            cnt1++;
        }
        else
        {
            sum2 += i;
            cnt2++;
        }
    }
    A = sum1 / cnt1;
    B = sum2 / cnt2;
    printf("%.1f %.1f", A, B);

    return 0;
}

by Terrible @ 2023-05-11 01:20:17

double A = sum1 / cnt1;cnt1为int型,若sum1也为int型,则进行的是整数除法,对正数而言,要进行向下取整得到一个整数,再转化成double。若两者其一为浮点型,则进行浮点除法,得出浮点数。让两个int做浮点除法的表达式:1.0*sum1/cnt1


by Glassy_Sky @ 2023-05-11 11:36:07

    A = sum1 / cnt1;
    B = sum2 / cnt2;

用 int 定义的变量做除法可能会出事


by Domoo @ 2023-05-11 23:00:21

@Terrible 哦哦!我说怎么一开始输出的样例第二个数是50.0,原来是先向下取整了(。 ́︿ ̀。)感谢大佬解答


|