C++计算1/i!数项级数求和公式

1.计算lnx的导数(c++)#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
double ln(int x){
//
double E=0.4e-4;
double h=0.32;
for(int i=0;i<20;i++){//不断/2.0,使h趋近于0,但注意循环次数不要太大,否则输出结果会乱码,因为计算机的精度也是有限的
h/=2.0;
}
return log((x+h)/x)/h;
}
int main()
{
int m;
scanf("%d",&m);
double x[100];
for(int i=0;i<m;i++){
scanf("%lf",&x[i]);
}
for(int i=0;i<m;i++){
printf("%.2f\n",ln(x[i]));
}
return 0;
}
2.调和级数求和(c++)#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
//#include<bits/stdc++.h>
using namespace std;
double sumHSDL(int h){
double sum=0;
for(int i=1;i<=h;i++){
sum+=1.0/i;
//
cout<<sum<<endl;
}
//
cout<<"sum="<<sum;
return sum;
}
double sumHSDR(int h){
double sum=0;
//
cout<<"h="<<h<<endl;
for(int i=h;i>=1;i--){
//不可以1/i,否则小数部分会被丢弃,必须1.0/i
sum+=1.0/i;
}
return sum;
}
int main()
{
int m;
cin>>m;
vector<int> k;
int a;
for(int i=0;i<m;i++){
cin>>a;
k.push_back(a);
}
for(int i=0;i<m;i++){
//
cout<<setprecision(15)<<sumHSDL(k[i])<<" ";
//
cout<<setprecision(15)<<sumHSDR(k[i])<<endl;
printf("%.14f ",sumHSDL(k[i]));
printf("%.14f\n",sumHSDR(k[i]));
}
return 0;
}
程序1.01完整的列表计算程序(Java)import javax.sound.midi.SoundbankResource;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import static java.lang.Math.log;
public class ListCal101 {
private static final int MN = 51;//数组长度
private static int RN = 0;//迭代次数
private static double EPS = 0.4e-4;//控制精度
private static List<Double> H = new ArrayList<>(MN);
private static List<Double> DTF = new ArrayList<>(MN);
private static List<Double> DQF = new ArrayList<>(MN);
private static List<Double> ERR = new ArrayList<>(MN);
private static double X0 = 2.0;
private static double H0 = 0.32;
public static double deltF(double x, double h) {
return Math.log((x + h) / x);
}
public static void operation() {
int k;
H.add(H0);
DTF.add(deltF(X0, H.get(0)));
DQF.add(DTF.get(0) / H.get(0));
ERR.add(1.0);
for (k = 1; k < MN; k++) {
H.add(H.get(k - 1) / 2.0);
DTF.add(deltF(X0, H.get(k)));
DQF.add(DTF.get(k) / H.get(k));
ERR.add(Math.abs(DQF.get(k) - DQF.get(k - 1)));
if (ERR.get(k) < EPS)
break;
}
RN = k + 1;
}
public static void showTable() {
System.out.println("===============================================================");
System.out.println("\t\tk\t\tH[k]\t\tDTF[K]\t\tDQF[k]\t\tERR[k]");
System.out.println("---------------------------------------------------------------");
for (int k = 0; k < RN; k++) {
//
输出宽度,精度
System.out.println(String.format("%2d \t%10.6f \t%12.8f \t%12.8f \t%12.4e", k, H.get(k), DTF.get(k), DQF.get(k), ERR.get(k)));
}
System.out.println("---------------------------------------------------------------");
System.out.println(String.format("ANS=%12.8e", DQF.get(RN - 1)));
System.out.println("===============================================================");
}
public static void formProblem() {
System.out.println("Please Enter x0:");
Scanner scanner = new Scanner(System.in);
X0 = scanner.nextDouble();
System.out.println("Please Enter h0:");
H0 = scanner.nextDouble();
}
public static void main(String[] args) {
ListCal101.formProblem();
ListCal101.operation();
ListCal101.showTable();
}
}
程序2.01分析计算机输出结果的有效数值位数(Java)import javax.swing.*;
public class EffectiveNum201 {
//
private static final double PI = 3.1415926535897932;
//
private static final double PI = 3.14159265358;
private static final double PI = 3.14159;
private static double deltx = 0.25 * PI * 1.0e-8;
private static double x = 0.5 * PI - deltx;
private static double y1 = Math.sin(deltx);
private static double y2 = Math.cos(x);
private static double y3 = Math.cos(deltx);
private static double y4 = Math.sin(x);
public static void display() {
System.out.println(String.format("PI =%22.15e", PI));
System.out.println(String.format("y1 =%22.15e", y1));
System.out.println(String.format("y2 =%22.15e", y2));
System.out.println(String.format("y3 =%22.15e", y3));
System.out.println(String.format("y4 =%22.15e", y4));
}
public static void main(String[] args) {
EffectiveNum201.display();
}
}
程序2.06三种方法对调和级数求前N项和 (Java)import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CalHS206 {
private static final int MN = 12;
private static final int RN = 10;
private static final List<Long> N = new ArrayList<>(Arrays.asList(
10L, 100L,
1000L, 10000L,
100000L, 110000L,
1000000L, 1100000L,
10000000L, 11000000L
));
private static List<Float> HSF = new ArrayList<>(MN);
private static List<Float> HSB = new ArrayList<>(MN);
private static List<Double> HSD = new ArrayList<>(MN);
public static float sumHSF(long n) {
long k;
float y = 0.0f;
for (k = 1; k <= n; k++) {
y += 1.0 / k;
}
return y;
}
public static float sumHSB(long n){
long k;
float y=0.0f;
for (k = n; k >= 1; k--) {
y+=1.0/k;
}
return y;
}
public static double sumHSD(long n){
long k;
double y=0.0;
for (k = n; k >= 1; k--) {
y+=1.0/k;
}
return y;
}
public static void operation(){
int k;
for (k = 0; k < RN; k++) {
HSF.add(sumHSF(N.get(k)));
HSB.add(sumHSB(N.get(k)));
HSD.add(sumHSD(N.get(k)));
}
}
public static void showTable(){
System.out.println("=====================================================");
System.out.println("\t\tN[k]\t\tHSF[K]\t\tHSB[k]\t\tHSD[k]");
System.out.println("-----------------------------------------------------");
for (int k = 0; k < RN; k++) {
//
输出宽度,精度
System.out.println(String.format("%2d \t%10d \t%10.6f \t%10.6f \t%12.8f",k,N.get(k),HSF.get(k),HSB.get(k),HSD.get(k)));
}
System.out.println("=====================================================");
}
public static void main(String[] args) {
CalHS206.operation();
CalHS206.showTable();
}
}
}

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
0
点赞

0
收藏
觉得还不错?
一键收藏
打赏
代码【级数求和】代码【级数求和】复制链接
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
成就一亿技术人!
hope_wisdom 发出的红包
实付元使用余额支付
点击重新获取
钱包余额
0
抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。余额充值
}
for但此法的缺陷是当n很大时,会循环很多次,影响运行时间。时间复杂度为O(n/2)=O(n)#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
for (int i=1; i<=n; i++)
if (i%2 == 0)
sum += i;
cout << sum << endl;
return 0;
}
while时间复杂度同上。#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
while (n) {
if (n%2 == 0)
sum += n;
n--;
}
cout << sum << endl;
return 0;
}
利用数学规律详细解释:https://www.nowcoder.com/practice/03df7fa0950046a9ba564b4438f918a3?tpId=225&tags=&title=&difficulty=0&judgeStatus=0&rp=0#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
if (n%2 == 1)
n--;
sum = (n/2) * (n/2 + 1);
cout << sum << endl;
return 0;
}
}

我要回帖

更多关于 i的平方的前n项和 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信