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

一次笔试

两道编程题

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值