1. 程式人生 > >SDUT 2557分段函式Java實現

SDUT 2557分段函式Java實現

Problem Description

函式是一種特殊的對映,即數集到數集的對映。對於給定的每個自變數都能給出一個確定的值,這是一件多麼牛的事情呀。其實不是函式牛,而是因為它具有這種性質我們的數學家才這麼定義了它。函式有很多型別,雖然本質都是對映,但為了方便研究和應用,數學家們做了很多分類。比如線性函式,非線性函式,隨機函式,還有一些具有特殊性質的函式等等。

今天我們要關注的是分段函式,所謂分段就是對於整個定義域來說,函式的值域是不連續的。很明顯的一個就是絕對值函式,類似於y=|x|,(x,y屬於R)。不連續是按照自變數的連續變化函式值的變化不連續而已,但函式仍然不離不棄的給了每個自變數一個值。

總之,函式就是按照規則對自變數進行操作得到相應的值。而程式裡的函式就更牛了,它可以對我們的輸入(自變數)進行各種我們想做的操作,最後得到輸出(值),很好玩吧。

今天,就希望你能用程式裡的函式實現數學裡的分段函式,加油哦。

這個分段函式長得是這個樣子的:

F(x) = log2(x)    0<x<10        = |x|+sin(x) x<0        =0             x=0        =x^2          x>=10 

Input

輸入包含多組。 第一行給出資料的組數T。 接下來T行每行一個實數X。

Output

輸出T行,每行一個函式值,四捨五入保留到小數點後兩位。 希望你能根據函式的表示式,對於給定的每個自變數不離不棄的計算出它的值。

Sample Input

4
0
10
5
-1
Sample Output
0.00
100.00
2.32
0.16

難實現的地方還是在第一步,要注意的是在Java中  log2N,首先要弄明白一個初中學到的公式log2N=logeN/loge2,logeN代表以e為底的N的對數,loge2代表以e為底的2的對數.    在java.lang.math類中的log(double a)代表以e為底的a的對數,因此log2N在Java中的表示為:     log((double)N)/log((double)2),知道這個就容易了。

import java.util.*;
public class Main{
   public static double HS(double n){
	   if(n==0)
		   return 0;
	   else if(n>=10)
		   return n*n;
	   else if(n<0)
		   return -1*n+Math.sin(n);
	   else
		   return Math.log(n)/Math.log((double)2);
	   
   }
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
             double n;
             int t;
             while(cin.hasNext()) {
            	 t=cin.nextInt();
            	 for(int i=0;i<t;i++) {
            	 n=cin.nextDouble();
            	 System.out.printf("%.2f\n",HS(n));}
             }
    }
}