您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java每次输入一个字符+高精度取整计算(记洛谷P2394题WA+TLE+RE的经历,Java语言描述)

星拱北辰 发布时间:2019-12-25 01:38:34 ,浏览量:0

祝大家圣诞节快乐

卑微菜鸡深夜写博客~~~55555

其实这题真的有毒

这题你要是C/C++,虽然语法不是辣么直接,但几行而已:

#include

using namespace std;

int main(){
    long double x;
    scanf("%15Lf",&x);//注意这里特殊写法
    printf("%.8Lf",x/23.0);//写成23也可以
    return 0;
}
题意说明

P2394题目链接

在这里插入图片描述 在这里插入图片描述

分析

这题简直有病,因为Java显然没有C/C++/Python那么方便的输入输出体系,而且Java的内存开销很大、运行时间很慢……极其不友好~~

但我偏要用Java来AC掉这个破题!!!

其实就是除以23即可,问题是这个数据怎么读。

这个数用int啥的承载不了的,如果我们用BigInteger其实相当于就是用String读的,没意思。用String会爆炸~~

EOF是换行符\n吗?其实不一定,但这题表述很差劲,令人费解,所以引来不少误会…… (Java给程序员呈现的莫得EOF,所以想通过’\0’啥的来judge的肯定不行~~)

另外,运算的时候应该用BigDecimal保险一下~~

问题反思

其实解题过程中虽然出过WA、TLE、RE,但是我这次最核心的错误是RE,这个RE源于本题题意讲解的lj,出自我认为终止为\n,实际上可以基本任意……

第一次提交——TLE+RE
import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BigDecimal number = new BigDecimal(scanner.nextLine());
        scanner.close();
        number = number.divide(new BigDecimal("23"));
        double result = number.doubleValue();
        System.out.printf("%.8f", result);
    }
}

在这里插入图片描述

自测: 在这里插入图片描述

心态挺崩的吧,但是还是继续吧……

第二次提交——第N次提交

基本情况如下图:

在这里插入图片描述 本来想利用read()来做,结果根本执行不下去~~

import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader jin = new BufferedReader(new InputStreamReader(System.in));
        int counter = 0, i = 0;
        List list = new ArrayList(16);
        char temp = (char)System.in.read();
        while(temp != '\n' && counter             
关注
打赏
1660750074
查看更多评论
0.0905s