请问这一天为什么要判断奇偶呢?不判断奇偶超时,但判断了不明白
Description
给定一个n,求出s = 1+2+3+...+n的值。
Input
输入只有一行,包含一个正整数n(n<=232)。
Output
输出一行,为1+2+...+n的值。
Sample Input
10
Sample Output
55
HINT
n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出
答案
#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned long long int n;
scanf("%llu",&n);
if(n%2==0)
printf("%llu",n/2*(n+1));
else
printf("%llu",(n+1)/2*n);
return 0;
}
这就是等差数列前n项和公式啊,公差为1
(首想加尾项)乘以项数除以2
奇数直接除以2会有误差,所以交换n和n+1的位置避免错误
因为得先除以2再运算乘,否则先乘后数字太大超过范围
两个式子都等于(1+n)*n/2,不过运算顺序不同
题中HINT给了暗示:
n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出
所以这话一出,它肯定会比较卡这个范围,所以通过判断奇偶,来减少它的数据选择和计算次序,进而避免超时。
望采纳!!