PAT甲级1104 Sum of Number Segments:[C++题解]数段之和,测试点2爆double,请用long double!!!
文章目錄
- 題目分析
- 題目鏈接
題目分析
來源:acwing
分析:本題題意比較簡單,但是不能僅僅根據定義來算。
本題思路:統計每個數在多少個區間出現過,也就是這個數需要加多少次。共有n個數,其中第i個數在多少個區間出現過呢? 如下圖:
ac代碼
第一層:
請注意數據溢出, int * int 的時候105×10510^5\times 10^5105×105相乘會溢出int!所以不能寫成int * int * double,這種寫法在計算int * int的時候會溢出。
第二層:
而是要寫成double * int * int 這樣,double * int計算的時候會進行隱式類型轉化,轉換成高精度的double,然后它的結果(double類型)再和int相乘,再進行類型轉換,還是double類型。
第三層:
But ,不要高興得太早!!!PAT又加強數據了,double也存不下了,下面測試點2的數據已溢出double。需要long double類型,對應的輸出不是%lf,而是大寫的%Lf!!!或者是%llf
是:printf("%.2Lf",res); 是:printf("%.2llf",res);不是: printf("%.2lf",res);下面是C語言printf的格式說明:
%e, %E : 浮點數使用科學符號表示之,指數將帶正負號, float x,doubley;
%f : 單精度浮點數(預設輸出精度6位), float x;
(註 : 對 printf 而言, %f/%lf 可適用於 double / float)
%lf : 倍精度浮點數(預設輸出精度6位), double x;
%llf, %LF : 雙倍精度浮點數(預設輸出精度6位), long double x;
%g, %G : 由系統決定是否採科學符號表示。
參考來源:https://edisonx.pixnet.net/blog/post/35305668
C語言的類型轉換請參考一篇好文:csdn博主zhuimengzh文章:C語言中的整數自動轉換原則
題目鏈接
PAT甲級1104 Sum of Number Segments
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的PAT甲级1104 Sum of Number Segments:[C++题解]数段之和,测试点2爆double,请用long double!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1103 Integer Fa
- 下一篇: s3c2440移植MQTT