HDU2009求數列的和

2021-10-02 22:39:10 字數 1230 閱讀 9984

problem description

數列的定義如下:

數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。

input

輸入資料有多組,每組佔一行,由兩個整數n(n<10000)和m(m<1000)組成,n和m的含義如前所述。

output

對於每組輸入資料,輸出該數列的和,每個測試例項佔一行,要求精度保留2位小數。

sample input

81 4

2 2sample output

94.73

3.41

/*

input

數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。

輸入資料有多組,每組佔一行,由兩個整數n(n<10000)和m(m<1000)組成,n和m的含義如前所述。

output

對於每組輸入資料,輸出該數列的和,每個測試例項佔一行,要求精度保留2位小數。

81 4

2 294.73

3.41

9+3+81+

*/#include

#include

intmain()

printf

("%0.2lf\n"

,sum);}

return0;

}

while(~scanf("%lf %d",&m,&n))

其功能是迴圈從輸入流讀取m和n,直到遇到eof為止,等同於while (scanf("%d%d",&m,&n)!=eof)。

scanf()函式返回成功賦值的資料項數,出錯時則返回eof,定義為-1。~是按位取反,-1十六進製制補碼表示為0x

ffffffff,f是二進位制的1111,取反後就全部變成0了,於是while結束。只有返回值為eof(即-1)時,其取反的的值(即while迴圈的判斷條件)才為0,才能結束迴圈,其它輸入情況下(無論是否輸入成功)while迴圈的判斷條件為非0,即為真。

這種寫法的漏洞在於:一但輸入的值為字母、符號之類的,scanf賦值不成功把讀到的內容又返回到stdin的緩衝區(假設這個值為t),其取反得到的值使while又進入到下一次迴圈,scanf又從stdin緩衝區裡讀到了原先吐回的t,如此成了死迴圈。

HDU 2009 求數列的和

problem description 數列的定義如下 數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。input 輸入資料有多組,每組佔一行,由兩個整數n n 10000 和m m 1000 組成,n和m的含義如前所述。output 對於每組輸入資料,輸出該數列的和,每個測試例項佔...

hdu 2009 求數列的和

problem description 數列的定義如下 數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。input 輸入資料有多組,每組佔一行,由兩個整數n n 10000 和m m 1000 組成,n和m的含義如前所述。output 對於每組輸入資料,輸出該數列的和,每個測試例項佔...

HDU 2009 求數列的和

我的個人 部落格 blog blog 197 歡迎交換友鏈 problem description 數列的定義如下 數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。input 輸入資料有多組,每組佔一行,由兩個整數n n 10000 和m m 1000 組成,n和m的含義如前所述。o...