P1035 [NOIP2002 普及组] 级数求和(java)

[NOIP2002 普及组] 级数求和 - 洛谷

这是一个典型的数学问题,可以通过遍历求和来逼近。可以使用一个变量来记录当前的和,然后在循环中不断累加分数的倒数,直到和大于k为止。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k =sc.nextInt();
        double sum=0;
        int n=1;
        
        while(sum<=k) {
        	sum+=1.0/n;
        	n++;
        }
        System.out.print(n-1);
    }
}
        
      

这段代码首先读取输入的整数k,然后通过一个while循环来计算和S_n,直到和大于k为止。最后输出n-1即为所求的最小的n。


为什么sum要用double类型

在这个问题中,sum需要使用double类型是因为分数的倒数可能会得到小数,如果使用整数类型的话,会导致截断,从而影响精度。例如,如果使用整数类型来计算分数的倒数,那么1/2将会得到0而不是0.5。因此,为了保证计算精度,需要使用double类型来存储分数的倒数。


在Java中,整数和浮点数之间的运算会根据规则进行类型转换。

下面是一些常见的情况:加法、减法、乘法和除法:如果其中一个操作数是double类型,那么结果将会是double类型,否则结果将保持为int类型。

double result = 5.0 / 2;
System.out.println(result); // 输出结果为2.5

在这个例子中,5.0是double类型的,2是int类型的,但是结果将会是double类型的,因为整个表达式都被提升为double类型。


取余运算:取余运算符(%)只能用于整数操作数,因此如果其中一个操作数是double类型,会导致编译错误。

double a = 5.5;
int b = 2;
// double result = a % b; // 这里会导致编译错误

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值