Java練習 SDUT-2504_多項式求和
阿新 • • 發佈:2018-09-27
system 測試 n) 編程 ble 一個 pro while input
多項式求和
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
多項式描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ……
先請你求出多項式前n項的和。
Input
第一行輸入一個數T代表測試數據個數(T<=1000)。接下來T行每行1個數代表n(0<=n< 2^31)。
Output
對於每個輸入樣例,輸出多項式和的結果(結果精確到小數點後兩位)。每行輸出一個結果。
Sample Input
2
1
2
Sample Output
1.00
0.50
Hint
Source
中國海洋大學第三屆“朗訊杯”編程比賽高級組試題
這道題數據量特別大,如果頭鐵硬算基本都會超時,答案精確到小數點後兩位,當n到達一定大小時就不會在影響結果。
打表可以得到在270左右就不會再變,保險起見取300,即
if(n>=300)
n = 300;
其他的正常計算就好。
import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int t,i,n,k; double sum; t = cin.nextInt(); while(t-->0) { k = 1; n = cin.nextInt(); if(n>=300) n = 300; sum = 0; for(i=1;i<=n;i++) { sum += 1 / (double)i * k; k = -k; } System.out.printf("%.2f\n",sum); } cin.close(); } }
Java練習 SDUT-2504_多項式求和