17张牌你能秒我


私信TA

用户名:bsdkbsm

访问量:1739

签 名:

君子坐而论道,少年起而行之

等  级
排  名 3666
经  验 1477
参赛次数 1
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业 软件工程

  自我简介:

TA的其他文章

解题思路:

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


        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分

12 人评分

  评论区

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
2022-07-20 10:32:57 | |
#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;
}
这个有什么问题?
2022-07-07 20:48:41 | |
#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;
}

为什么提交上去不对呢?
2022-06-25 17:17:10 | |
#include <stdio.h>
#include <math.h>>
double fact(double n)
{
	int i;
	double j=1;
	for(i=1;i<=n;i++)
	{
		j=i*j;
	
	}
		return j;
}


double mypow(double x,int n)
{
	int i;
	double m,fac;
	for(i=1;i<=n;i++)
	{	fac=fact(n);
		m=(pow((-1),i-1)*pow(x,i))/fac+m;
	}
	return m;
}
int main ()
{ int n;
double x,w;
scanf("%lf %d",&x,&n);
w=mypow(x,n);
printf("%.4lf",w);
}

输出1.000问题在哪求解
2022-03-06 22:05:19 | |
#include <stdio.h>
#include <math.h>
int fact(int n)
{
	int i;
	double p=1;
	for(i=1;i<=n;i++)
	p=(double)p*i;
	return p;
}
int mypow(int x,int n)
{
	double y=1;
	int i;
	for(i=0;i<n;i++)
	y=(double)y*x;
	return y;
}
int main()
{
	double x,r=0,t=0,sum=0;
	int n,i,q=1;
	scanf("%lf%d",&x,&n);
	for(i=1;i<=n;i++)
	{
		q=1;
		if(i%2==0)
		{
			q=-1;
		}
		r=fact(i);
		t=mypow(x,i);
		sum=(double)sum+q*t/r;	
	}
	printf("%.4lf",sum);
}



这个哪里有问题呢??大佬们拜托拜托!!
2022-02-06 17:08:02 | |
  • «
  • 1
  • »