1. 程式人生 > >Java練習 SDUT-2504_多項式求和

Java練習 SDUT-2504_多項式求和

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_多項式求和