保留长度四舍五入+回文素数

一次笔试

两道编程题

  1. 给定一个计算公式,输入n>0,输出该公式计算的值,保留4位小数,四舍五入
  2. 输入n,m且1<=n<m<=1000000,输出[n,m]中有多少个回文素数

公式计算

计算res = 1/5 - 1/10 +1/15 - 1/20 +···+1/(5*(2n-1)) - 1/(5(2*n))
代码其实很简单,然而由于忘记了四舍五入保留长度的方式,故而写的又臭又长,浪费时间

import java.util.*;
class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            // 得到结果
            String res = String.valueOf(dfs(n));
            // 处理保留长度与四舍五入
            char[] arr = res.toCharArray();
            if (arr.length > 5) {
                if (arr[6] - '0' >= 5) {
                    int add = 1;
                    int i = 5;
                    while (add == 1) {
                        int tmp = arr[i] - '0';
                        if (tmp == 9) {
                            arr[i] = '0';
                        } else {
                            arr[i] = (char) ('0' + (tmp + 1));
                            add = 0;
                        }
                        i--;
                    }
                }
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 6; i++) {
                    sb.append(arr[i]);
                }
                res = sb.toString();
            }else{
                for(int i = 0;i < 6-arr.length;i++){
                    res += "0";
                }
            }
			// 输出结果
            System.out.println(res);
        }

    }

    public static double dfs(int n) {
        if (n <= 0) {
            return 0d;
        }
        return 1d / (5 * (2 * n - 1)) - 1d / (5 * (2 * n)) + dfs(n - 1);
    }
}

考完一搜四舍五入保留长度的方式,晕,一行搞定,我怎么忘记了

public class Biu {
    public static void main(String[] args) {
        System.out.println(String.format("%.4f",0.13338d));
        System.out.printf("%.4f \n",0.13338d);
        System.out.printf("%.4f",0.1d);
    }
}

结果如下,我怎么就把format给忘记了,别人还自动四舍五入了,长点记性
在这里插入图片描述

回文素数个数

  1. 输入n,m且1<=n<m<=1000000
  2. 在[n,m]中找出符合条件的个数
  3. 条件为:从数中剔除一个数后为素数和回文的数字
  4. 例子:110 去除0后为11,为素数且为回文,符合条件

判断素数

比1大且只有 mod 1和其本身时才为0的的数称为素数

public static boolean isSu(int num){
        if(num < 2){
            return false;
        }
        if(num == 2){
            return true;
        }
        int br = (int)Math.sqrt(num);
        for(int i = 2;i <= br;i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }

我没a出来,有大佬a出来了,就懒得写了详情请看8.6京东笔试Java研发全A

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BigDecimal 类提供了 setScale() 方法来设置小数点后的位数,这个方法有一个参数,可以设置为 ROUND_UP,这样就可以不进行四舍五入,直接保留所有小数。 ``` import java.math.BigDecimal; public class Main { public static void main(String[] args) { BigDecimal bd = new BigDecimal("3.14159265358979323846"); bd = bd.setScale(20, BigDecimal.ROUND_UP); System.out.println(bd); } } ``` 运行结果为 3.14159265358979323846 ### 回答2: BigDecimal是一个用于高精度计算的Java类,它可以用于精确存储、计算和比较任意长度的十进制数。当我们使用BigDecimal进行数值计算时,默认情况下它会进行四舍五入保留指定位数的小数。 然而,如果我们不希望进行四舍五入,而是要保留所有的小数位,可以使用BigDecimal的setScale方法来设置小数位数和舍入模式。具体做法如下: 1. 首先,创建一个BigDecimal对象,表示需要进行精确计算的数值。 例如:BigDecimal num = new BigDecimal("3.14159265358979323846"); 2. 调用setScale方法,设置小数位数和舍入模式。 例如:BigDecimal result = num.setScale(20, RoundingMode.DOWN); 其中,setScale方法的第一个参数表示保留的小数位数,第二个参数表示舍入模式。RoundingMode.DOWN表示向零方向舍入。 3. 最后,通过result对象即可获取保留所有小数位的结果。 例如:System.out.println(result); 以上操作将会输出保留所有小数位的结果:3.14159265358979323846。 通过使用BigDecimal的setScale方法,并指定RoundingMode.DOWN舍入模式,我们可以简单地保留所有小数位,而不进行四舍五入。这对于需要进行精确计算且不希望损失任何精度的场景非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值