簡體   English   中英

std::cout 如何格式化 output?

[英]How does std::cout format the output?

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++ 的新手。

cout (或任何std::ostream )“選擇”的 output 格式取決於輸出的類型(具體而言,它取決於該類型的operator<<的實現)。

讓我們看看在這兩種情況下都有哪些類型在起作用。

在您的第一個示例中,您輸出的是double精度數,因為abn是雙精度數。 盡管xlong long ,但由於 隱式轉換,表達式是雙重的。

在第二個示例中,您輸出的是long long ,因為那是ans的類型。 請注意,您對ans的計算可能會被截斷,因為它被計算為 double (出於上述原因)但存儲在long long中。

Without knowing the details of the test cases you are talking about, one difference in the output is that doubles will likely be output in decimal notation (eg 1.23 or 1.0 ) whereas a long long (or any integral type) will be output as a whole數字(注意:有一些方法可以改變這種行為,為了簡單起見,我在這里省略了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM