題目描述:
數列的第一項為n,以后各項為前一項的平方根,求數列的前m項的和。
輸入描述:
輸入數據有多組,每組占一行,由兩個整數n(n < 10000)和m(m < 1000)組成,n和m的含義如前所述。
輸出描述:
對於每組輸入數據,輸出該數列的和,每個測試實例占一行,要求精度保留2位小數。
這里涉及到一個輸出精度的控制,我們知道在這C語言中,控制輸出精度可以直接用以下代碼。
printf("%.2lf\n",sum);
在C++中輸出控制精度需要用到std::ios_base::precison,即std::cout.precison()。這個函數是用來控制輸出的有效位,如下所示
double n = 0.001010; cout.precision(4); cout << n << endl;
這個的輸出結果就是0.00101。從第一個1開始為第一個有效位,連續輸出4個有效位,最后一位的0被省略。這並沒有達到我們要設置小數點后位數的要求,所以在查閱了資料后發現結合std::fixed使用可以控制小數點后的位數,使用方法如下:
double n = 0.001010; cout.precision(4); cout << fixed << n << endl;
這個的輸出結果就是0.0010。
需要注意的是 cout.precision(4); 后cout的精度一直都是4個有效位,若設置了fixed,就一直控制小數點后的位數。目前還沒有消除precision的方法,只能重新設置成新的有效位,但是針對fixed可是通過cout.unsetf( ios::fixed );來消除。
