小崔学函数

时间: 1ms        内存:128M

描述:

函数是一个特殊的映射,即数集到数集的映射,对于给定的每个自变量都能给定一个确定的值。函数有很多分类,比如线性函数,非线性函数,随机函数,还有一些具有特殊性质的函数等等。小崔觉得函数很神奇,最近致力于学习函数,简单的函数已经不能难住他了,他接下来,要学习分段函数。他刚做到一个分段函数,到现在还没做出来,你能帮帮他吗?
这个分段函数长这样:
F(x)=|x|!             -20<=x<0
    =√(666888)         x=0
    =1!+2!+…+x!     0<x<=10
    =√(1!+2!+…+x!) 10<x<=20
(√代表根号,-20<=x<=20,x为整数)
要求:多组输入输出

输入:

整数

输出:

浮点数,保留三位小数

示例输入:

-5
0
6
12

示例输出:

120.000
816.632
873.000
22868.238

提示:

参考答案(内存最优[1132]):

#include<stdio.h>
#include<math.h>
int main()
{
    int x;
    double y,p=1;
    int i;

    while(~scanf("%d",&x)){
        if( -20<=x && x<0 ){
            x=-x;
            y=1;
            for( i=1; i<=x; i++){
               y*=i;
            }
        }
        else if( x==0 ){
            y=sqrt( 666888 );
        }
        else if( x>0 && x<=10 ){
            y=0;
            p=1;
            for( i=1; i<=x; i++){
                p*=i;
                y+=p;
            }
        }
        else{
            y=0;
            p=1;
            for( i=1; i<=x; i++){
                p*=i;
                y+=p;
            }
            y=sqrt( y );
        }
        printf("%.3f\n",y);
    }
    
    return 0;
}

参考答案(时间最优[1]):

#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int main()
{
    int x;
    double f,k,t,s;
    int i,j,m;
    while(~scanf("%d",&x))
    {
        if(x<0)
        {
            k=1;
            for(i=1;i<=abs(x);i++)
            {
                k=k*i;
            }
            f=k;
        }
        else if(x==0)
        {
            f=sqrt(666888);
        }
        else if(x>0&&x<=10)
        {
            t=1,s=0;
            for(int m=1;m<=x;m++)
            {
                t*=m;
                s+=t;
            }
            f=s;
        }
        else
        {
            s=0,t=1;
            for(int j=1;j<=x;j++)
            {
                t*=j;
                s+=t;
            }
            f=sqrt(s);
        }
        printf("%.3f\n",f);
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。