一次笔试
两道编程题
- 给定一个计算公式,输入n>0,输出该公式计算的值,保留4位小数,四舍五入
- 输入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给忘记了,别人还自动四舍五入了,长点记性
回文素数个数
- 输入n,m且1<=n<m<=1000000
- 在[n,m]中找出符合条件的个数
- 条件为:从数中剔除一个数后为素数和回文的数字
- 例子: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