不用long的危害(记洛谷P5534题的WA经历,Java语言描述)
閑來無事想起了洛谷,打卡簽到刷他幾個(gè)題再說,殊不知這是杯具的開始~~
P5534是一個(gè)弱智題,入門級別,只需要知道下面公式即可,而且還不止一個(gè)公式。
下面是我用的公式(高中的感覺真讓人懷念啊~~):
看題:
題目描述
小 X 給了你一個(gè)等差數(shù)列的前兩項(xiàng)以及項(xiàng)數(shù),請你求出這個(gè)等差數(shù)列各項(xiàng)之和。
等差數(shù)列:對于一個(gè) n項(xiàng)數(shù)列 a,如果滿足對于任意 i∈[1,n),有 ai+1?ai=d,其中 d 為定值,則稱這個(gè)數(shù)列為一個(gè)等差數(shù)列。
輸入格式
一行 3個(gè)整數(shù) a1,a2,n,表示等差數(shù)列的第 1,2 項(xiàng)以及項(xiàng)數(shù)。
數(shù)據(jù)范圍:
∣a1?∣,∣a2?∣≤10^6。
3≤n≤10^6。
輸出格式
一行一個(gè)整數(shù),表示答案。
輸入輸出樣例
輸入 #1
輸出 #1
6輸入 #2
-5 -10 5輸出 #2
-75說明/提示
【樣例 1 說明】
這個(gè)等差數(shù)列為 1 2 3,其各項(xiàng)之和為 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是吧,提交以后我傻了:
這都是啥?
冥思苦想很久,大膽地做了一個(gè)很極限的測試:
結(jié)果是悲壯的:
-2137671075這是啥?
我恍然大悟——溢出了。。。
那就換long唄?畢竟測試數(shù)據(jù)不超過100000。。。
一篇感人至深的code誕生了:
運(yùn)行上面的測試用例:
999950000699997很棒,然后:
終于AC了,痛哭流涕~~
以后要多做OJ,避免自己成為能寫系統(tǒng)卻不能做OJ的菜雞~~~
總結(jié)
以上是生活随笔為你收集整理的不用long的危害(记洛谷P5534题的WA经历,Java语言描述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】常见的Eclipse快捷键
- 下一篇: 洛谷P5709、P5710、P5711、