1、级数求和

考察:简单的循环,判断

 代码1:使用for循环,if语句判断条件。需注意s的数据类型为浮点型。

#include<bits/stdc++.h>

using namespace std;
int main()
{
	int n,k;//n是所求值,k整数,s和 
	double s=0;
	cin>>k;//输入k值 
	for(n=1;;n++)
	{
		s+=1.0/n;
		if(s>k)
		{
			cout<<n;
			break; 
		}
	 }  
	return 0;
}

代码2:对代码1中的for循环进行简化整合

#include<bits/stdc++.h>

using namespace std;
int main()
{
	int n,k;//n是所求值,k整数,s和 
	double s=0;
	cin>>k;//输入k值 
	 for(n=0;s<=k;++n,s+=1.0/n);
	 cout<<n;
	return 0;
}

代码3:while循环(do   while 循环同理),注意n的初始值,及n++和++n的区别。

#include<bits/stdc++.h>

using namespace std;
int main()
{
	int n=0,k;//n是所求值,k整数,s和 
	double s=0;
	cin>>k;//输入k值 
	 while(s<=k)
	 {
	 	++n;
	 	s+=1.0/n;	
	 }
	 cout<<n;
	return 0;
}

代码4:利用调和级数,已知求调和级数有限多项和的表达式为\sum_{k=1}^{n}\frac{1}{k}​ = \ln (n+1)+\gamma,我们拿过来用即可。(\gamma等于0.5772156649)故当s>k时,\ln (n+1)+\gamma>k,化简得n>e^{k-r}-1;我们只需求满足上式的最小的n,所以n=e^{k-r}+0.5(四舍五入),

#include<bits/stdc++.h>
using namespace std;

const double r=0.5772156649;
int main() 
{
    int k,n;
    cin>>k;
    n=exp(k-r)+0.5;
    cout<<n;
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值