您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

不用long的危害(记洛谷P5534题的WA经历,Java语言描述)

星拱北辰 发布时间:2019-10-13 11:08:10 ,浏览量:0

闲来无事想起了洛谷,打卡签到刷他几个题再说,殊不知这是杯具的开始~~

P5534是一个弱智题,入门级别,只需要知道下面公式即可,而且还不止一个公式。 下面是我用的公式(高中的感觉真让人怀念啊~~): 在这里插入图片描述 看题: 题目描述

小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和。

等差数列:对于一个 n项数列 a,如果满足对于任意 i∈[1,n),有 ai+1−ai=d,其中 d 为定值,则称这个数列为一个等差数列。 输入格式

一行 3个整数 a1,a2,n,表示等差数列的第 1,2 项以及项数。

数据范围:

∣a1​∣,∣a2​∣≤10^63≤n≤10^6

输出格式

一行一个整数,表示答案。 输入输出样例 输入 #1

1 2 3

输出 #1

6

输入 #2

-5 -10 5

输出 #2

-75

说明/提示

【样例 1 说明】

这个等差数列为 1 2 3,其各项之和为 6

我是用Java写的:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a1 = scanner.nextInt();
        int a2 = scanner.nextInt();
        int num = scanner.nextInt();
        int d = a2 - a1;
        System.out.println(num*a1 + num*(num-1)*d/2);
        scanner.close();
    }

}

然后一般小白看来肯定OK是吧,提交以后我傻了: 在这里插入图片描述 这都是啥? 冥思苦想很久,大胆地做了一个很极限的测试:

-99999 99999 99999

结果是悲壮的:

-2137671075

这是啥? 我恍然大悟——溢出了。。。 那就换long呗?毕竟测试数据不超过100000。。。 一篇感人至深的code诞生了:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long a1 = scanner.nextLong();
        long a2 = scanner.nextLong();
        long num = scanner.nextLong();
        long d = a2 - a1;
        System.out.println(num*a1 + num*(num-1)*d/2);
        scanner.close();
    }

}

运行上面的测试用例:

999950000699997

很棒,然后: 在这里插入图片描述 终于AC了,痛哭流涕~~ 以后要多做OJ,避免自己成为能写系统却不能做OJ的菜鸡~~~

关注
打赏
1660750074
查看更多评论
立即登录/注册

微信扫码登录

0.0414s