【发布时间】:2021-01-31 06:20:33
【问题描述】:
std::cout 是如何工作的? 以下代码未通过 HackerEarth.com 上某个问题的某些测试用例:
double n,a,b;
while(t--){
cin>>n>>a>>b;
long long x = round(b*n*1.0/(a+b));
cout<<((a*x*x) + b*(n-x)*(n-x))<<endl;
}
同时,以下一个通过了所有这些:
double n,a,b;
while(t--){
cin>>n>>a>>b;
long long x = round(b*n*1.0/(a+b));
long long ans = (a*x*x) + b*(n-x)*(n-x);
cout<<ans<<endl;
}
为什么当我将计算值存储在变量中时,只有测试用例通过? 如果直接打印到控制台,值会改变吗? 我是 C++ 的新手。
【问题讨论】:
-
在第一种情况下,代码打印
double,在第二种情况下,它打印通过将双精度截断为小于或等于它的最接近的整数而获得的long long。这两个值不一定相同,打印浮点和整数类型的默认格式也可能不同。 -
你能提供一个输出不同的例子吗? (除了给我们一些具体的工作之外,您可能会发现具体案例表明第一个代码可以输出非整数......)
-
@JaMiT 测试用例是隐藏的,但是,我明白你的意思是在第一种情况下获得一个非整数作为输出,而当存储在一个 long long 变量中时,它会被截断。谢谢。
-
@AkarshModi “测试用例被隐藏了”——这不是一个可以接受的借口。程序员所期望的技能之一是设计测试用例的能力,而不是仅仅依靠其他人来做。当您被告知某些测试用例失败时,您应该做出的反应之一是尝试更多的测试用例,直到找到一个失败的测试用例。 (此时,您将能够通过一个具体示例来扩充您的问题。)
-
感谢您的好建议!我一定会记住这一点的。