查看题目和答题点此跳转
首先分析题目的式子,
不难发现分子部分是固定为1的,而分母是依次递加1。
既然是依次递加n次,就是需要循环n次,使用循环解决。
因为是分式,所以值会出现小数,所以需要使用浮点数。而为了精确,则使用浮点数的double数据类型,double是双精度,可以比float的单精度多提供8位有效数字。
import java.util.Scanner;
//级数求和
//注意,精度问题,这里要用double。
public class P1035 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
double sn=0;
int k=s.nextInt();
for(int i=1;;i++){
sn+=1.0/i;
if(sn>k){
sn=i;
break;
}
}
System.out.print((int)sn);
}
}
主要是注意for循环的条件设置,因为第一个分母是1,所以直接从1开始。(从0开始也可以,但是题目是Sn>k,还是要算到1,我觉得没意义)
还有就是在代码中整数相除的话得到的是去掉小数的值,比如3/2=1。所以分子要写成1.0,作为浮点数运算,就可以保留小数了。
最后,题目要求输出的是一个整数,所以在输出时要把它强转成整数。或者用k代替if里面的sn,即可直接输出。
涉及知识点:输入输出、判断、循环、精度问题、数的运算