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;
}
while,下面的语句传递它们:
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++的新手。
输出格式" selected "通过cout
(或任何std::ostream
)取决于输出的类型(具体而言,它取决于该类型的operator<<
的实现)。
让我们看看在这两种情况下都有哪些类型在起作用。
在第一个示例中,您输出的是double
,因为a
、b
和n
是双精度体。尽管x
是long long
,但由于隐式转换,该表达式是双精度的。
在第二个示例中,输出的是long long
,因为这是ans
的类型。请注意,ans
的计算可能会被截断,因为它是作为双精度体计算的(原因如上所述),但存储在long long
中。
在不知道你正在谈论的测试用例的细节的情况下,输出的一个区别是双精度数可能以十进制形式输出(例如1.23
或1.0
),而long long
(或任何整数类型)将以整数形式输出(注意:有方法可以改变这种行为,我在这里省略了)。