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十六進製制補碼表示為0xffffffff,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...