OpenJudge 1.5.27:级数求和

描述

已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。

输入一个整数K。输出一个整数n。

错误答案及解析:

#include<cstdio>
using namespace std;
int main()
{
	int i,k;
	float n=0.0,sn=0;       //此处未注意数据范围 应使用double型
	scanf("%d",&k);
	while(sn<=k)
	{
		n+=1;
		sn+=1.0/n;
		
	}
	printf("%d",(int)n);
	
	return 0;
}
附:
类型范围
char 1 个字节 -128 到 127 或者 0 到 255
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
float 4 个字节 +/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 +/- 1.7e +/- 308 (~15 个数字)
long double 16 个字节 +/- 1.7e +/- 308 (~15 个数字)
wchar_t 2 或 4 个字节 1 个宽字符
 
正解:
#include<cstdio>
using namespace std;
int main()
{
	int i,k;
	double n=0.0,sn=0;
	scanf("%d",&k);
	while(sn<=k)
	{
		n+=1;
		sn+=1.0/n;
		
	}
	printf("%d",(int)n);
	
	return 0;
}
 
原文地址:https://www.cnblogs.com/ziyuan122625/p/11931090.html