C++ 为什么我的变量sannolikhet只打印出零?
我正在尝试创建一个程序,计算至少两个人的生日相同的概率C++ 为什么我的变量sannolikhet只打印出零?,c++,c++11,C++,C++11,我正在尝试创建一个程序,计算至少两个人的生日相同的概率 int main() { int n; double sannolikhet = 1; cout << "Skriv in antal personer mellan 2 - 182: "; cin >> n; 使用整数除法,答案将自动转换为整数,并向下舍入。 编辑:如@john所更正的,答案被截断为整数而不是四舍五入 因此,364/365将计算为0 尝试替换sannolikhet=s
int main()
{
int n;
double sannolikhet = 1;
cout << "Skriv in antal personer mellan 2 - 182: ";
cin >> n;
使用整数除法,答案将自动转换为整数,并向下舍入。
编辑:如@john所更正的,答案被截断为整数而不是四舍五入
因此,364/365将计算为0 尝试替换
sannolikhet=sannolikhet*((366-i)/365)代码>
至sannolikhet=sannolikhet*((366.0-i)/365.0)编码>使用整数除法,答案将自动转换为整数,并向下舍入。
编辑:如@john所更正的,答案被截断为整数而不是四舍五入
因此,364/365将计算为0
尝试替换sannolikhet=sannolikhet*((366-i)/365)代码>
至sannolikhet=sannolikhet*((366.0-i)/365.0)代码>严格来说,整数除法向零舍入。换句话说,它是截短的,而不是四舍五入的。我是编程新手,所以我总是犯这样的错误。现在它正常工作了,谢谢你的帮助!除法需要双倍,而不是减法。备选方案:(366-i)/365.0
严格来说,整数除法舍入为零。换句话说,它是截短的,而不是四舍五入的。我是编程新手,所以我总是犯这样的错误。现在它正常工作了,谢谢你的帮助!除法需要双倍,而不是减法。备选方案:(366-i)/365.0
sannoliket
不是零。((366-i)/365)
的结果适用于大量的i
值,因为将int
类型的两个值进行除法,会产生int
类型的值,并向零舍入。sannoliket
不是零。((366-i)/365)
的结果适用于大量的i
值,因为将int
类型的两个值进行除法,会产生int
类型的值,且四舍五入为零。
while (n < 2 || n > 182)
{
cout << "OBS! Skriv in ett tal mellan 2 - 182: \n";
cout << "Skriv in antal personer mellan 2 - 182: ";
cin >> n;
}
for (int i = 1; i < n; i++)
{
sannolikhet = sannolikhet * ((366 - i) / 365);
}
cout << "Sannolikheten att två personer har samma födelsedag är: " << fixed << setprecision(7) << sannolikhet <<" procent";
return 0;
}