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,原来是先向下取整了(。 ́︿ ̀。)感谢大佬解答