解题思路:

    首先通过拆分,可分为以下几步:


        1.实现fact()函数 ,完成阶乘

                阶乘可以看成1*2*3*..*n,  其中由1到n可以借用循环变量,

            再使用一个变量用于存储前一次的乘积,最后该变量所存储的值就是n的阶乘

            for(i=1;i<=n;i++)

                m=m*i;


        2.实现mypow()函数,完成xn次方

               xn次方可以看为n个x相乘的结果,即一个循环n次的乘法,

            注意此时x累乘后值发生变化,因用一变量存储初始x

            t=x;

            for(i=1;i<n;i++)

                x=x*t;


        3.实现奇数项为+,偶数项为-,并求和

                该功能易于实现,即奇数项乘以1,偶数项乘以-1,

                只需一个变量不断替换为相反数,再累积再变量上即可

             sum=0;

            for(i=1,t=1;i<=n;i++)

            {

                sum+=t * mypow( x,n )  / fact( n );

                t=-t;

            }



注意事项: 


1.合理使用数据类型

2.注意格式要求

参考代码:

#include <stdio.h>
double Fact(long long n)
{
	long long m=1;
	for (int i = 2; i <= n; i++)
		m=m * i;
	return m;
}

double MyPow(double x, long long n)
{
	double t = x;
	for (int i = 1; i < n; i++)
		x = x * t;
	return x;
}

int main(void)
{
	double x;
	long long n;
	double sum = 0;
	
	scanf("%lf", &x);
	scanf("%lld", &n);
	
	for (int i = 1, t = 1; i <= n; i++, t = -t)
		sum += t * MyPow(x, i) / Fact(i);
	printf("%.4lf", sum);
	return 0;
}



点赞(0)
 

0.0分

17 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 13 条评论

猫薄荷草 3月前 回复TA
#include <stdio.h>
double fact(long long n);
double mypow(double x,long long n);

int main()
{
	double x=0,sum=0;
	long long n=0;
	int i=0,t=0;
	scanf("%f %lld",&x,&n);
	
	for(i=1,t=1;i<=n;i++,t=-t){
		sum=sum+t*mypow(x,n)/fact(n);
	}
	
	printf("%.4lf",sum);
	
	return 0;
}

double fact(long long n){
	int i=0;
	long long sum=1;
	for(i=1;i<=n;i++){
		sum=sum*i;
	}
	return sum;
}

double mypow(double x,long long n){
	int a=0,c=0;
	double b=x,ama=0;
	for(a=1;a<n;a++){  //第一轮,b=4;第二论,b=8 
		b=b*x;
	}
	
	return b;
}

这个哪里有问题呢?可以请教一下大佬们吗
向志权 10月前 回复TA
#include<stdio.h>
#include<math.h>
double fact(int n)
{
	int i;
	double sum=1;
	for(i=1;i<=n;i++)
	{
		sum*=i;
	}
	return sum;
}
double mypow(double x,int n)
{
	
	double S;
	S=pow(-x,n);
	return S;
}
double fact(int n);
double mypow(double x,int n);
int main()
{
	double x;
	int n,i,t=-1;
	double f=0;
	scanf("%lf%d",&x,&n);
	for(i=1;i<=n;i++)
	{
		f+=t*mypow(x,i)/fact(i);
	}
	printf("%0.4lf",f);
	return 0;
}
kokoaaa 1年前 回复TA
#include <stdio.h>

double mypow(double a, long long int b){
    double q = a;
    if( b==1 ) return a;
    else return a * mypow(q,b-1);
}

double fac(long long int m){
    if( m==1 ) return 1;
    else return m * fac(m-1);
}

int main(){
    int t = -1;
    long long int i, n;
    double x, S = 0;
    scanf("%lf %lld", &x, &n);
    for( i=1; i<=n; i++ ){
        t *= -1;
        S += t * mypow(x,i) / fac(i);
    }
    printf("%.4lf", S);
}
Travis 1年前 回复TA
double  fact(int n)
{
	int i = 1;
	double sn = 1;
	for (; i <= n; i++)
	{
		sn *= i;
	}
	return sn;
}

double mypow(double x, int n)
{
	int i = 1;
	double sx = 1;
	for (; i <= n; i++)
	{
		sx *= x;
	}
	return sx;
}

int main()
{
	double x = 0;
	int n = 0;
	int j = 0;
	int s = -1;
	double sum = 0;
	scanf("%lf %d", &x, &n);
	for (j = 1; j <= n; j++)
	{
		s *= -1;
		sum += s * (mypow(x, j) / fact(j));
	}
	printf("%.4lf\n", sum);
	return 0;
}
喜羊羊与灰太狼 2年前 回复TA
double fact(double n);
double mypow(double x, double n);
int main()
{
	double n, x;
	int i;
	
	scanf("%lf%lf", &n, &x);
	

		double sum = 0.0000;
		double t = 1;

	for (i = 1, t = 1; i <= n; i++)

	{

		sum += t * mypow(x, n) / fact(n);

		t = -t;

	}
	printf("%.4lf\n", sum);
}
double fact(double n)
{
	double c = 0;
	if (n == 1)
	{
		return 1;
	}
	else
	{
		c=1 * fact(n - 1)*n;
		return c;
	}
}
double mypow(double x, double n)
{
	int i = 0;
	double sum = 1;
	for (i = 0; i < n; i++)
	{
		sum *= x ;
	}
	return sum;
}
为什么我最后的结果是0.000
KExa 2年前 回复TA
@耀辉 mypow函数里把j的类型换成double试试
耀辉 2年前 回复TA
#include<stdio.h>
double fact(long long n)
{
    long long i;
    i=1;
    while(n>0)
    {
        i=i*n;
        n--;
    }
    return i;
}
double mypow(double x, long long n)
{
    long long i, j;
    i=j=1;
    while(i<=n)
    {
        j=j*x;
        i++;
    }
    return j;
}
int main()
{
    int t;
    t=1;
    long long a, b;
    b=1;
    double c, sum;
    sum=0;
    scanf("%lf %lld", &c, &a);
    while(b<=a)
    {
        sum=sum+t*mypow(c,b)/fact(b);
        t=-t;
        b++;
    }
    printf("%.4lf", sum);
    return 0;
}
这个有什么问题?
流浪者与猴 2年前 回复TA
#include<stdio.h>
int main()
{
	double fact(long long n);
	double mypow(double x,long long n);
	double x,s=0.0,a,b;
	long long n,i,t=-1;
	scanf("%lf %d",&x,&n);
	for(i=1;i<=n;i++)
	{
		a=mypow(x,n);
		b=fact(n);
		if(i%2==0)
		{
			b=t*b;
		}
	
		s=s+a/b;
	}
	printf("%.4lf",s);
	return 0;
}
double mypow(double x,long long n)
{
	double z=1.0;
	long long j;
	for(j=1;j<=n;j++)
	{
		z=z*x;
	}
	return z;
}
double fact(long long n)
{
	double w=1.0;
	long long h;
	for(h=1;h<=n;h++)
	{
		w=w*h;
	}
	return w;
}

为什么提交上去不对呢?
嗑盐要努力呀 2年前 回复TA
@嗑盐要努力呀 谢谢!!
夜羊s 2年前 回复TA
@嗑盐要努力呀 你好,帮你找了一下,应该是fac=fact(n);这步错了,因为你里面填n,那fact(n)就是定值,每次运行代码都只和你输入的n有关也就是只是值是!n,你面必须填i也就是你取的那个变量,他才每次都随循环变化,从而达到从一的阶乘到n的阶乘。改成fac=fact(i);)