解题思路:
首先通过拆分,可分为以下几步:
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分
6 人评分
#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问题在哪求解
#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); } 这个哪里有问题呢??大佬们拜托拜托!!
btest 2022-02-22 21:20:29 |
hxd,主要是你的数据类型问题,还有这几个强制转换可有可无哈
夜羊s 2022-03-20 02:03:23 |
你好,帮你找了一下,应该是fac=fact(n);这步错了,因为你里面填n,那fact(n)就是定值,每次运行代码都只和你输入的n有关也就是只是值是!n,你面必须填i也就是你取的那个变量,他才每次都随循环变化,从而达到从一的阶乘到n的阶乘。改成fac=fact(i);)
嗑盐要努力呀 2022-04-16 11:26:54 |
谢谢!!