数列求和——注意数据类型


来源于计导第一次作业

已知正整数n与数列公式:

An = 123+234+345+…+(n-2)(n-1)n (n>=3)

An = 0 (n=1,2)

请根据n值计算该数列的前n项和的值,并输出。n的取值范围是(1<=n<=3000)。

注意:这里的An 只是一项,而我们要求的是计算该数列的前n项和。

提示:由于n值很大,建议使用long long型变量存储结果。

输入格式:
只有一个正整数n(1<=n<=3000)。

输出格式:
只有一个整数,为计算结果。

输入样例:
3000

输出样例:
12149993250000600

#include <stdio.h>
long long An(int a) {
if (a > 2) {
    return a * (a - 1) * (a - 2) + An(a - 1);
} else {
    return 0;
}
}//定义函数An
int main() {
int n;
long long sum = 0;
scanf("%d", &n);
for (int i = 3; i <= n; i++) {
    sum = sum + An(i);
}
printf("%lld", sum);
return 0;
}

//输出结果873019743440600 这是由于使用了int a 而不是long long a;因为在运算过程中可能会溢出。
//预期结果12149993250000600

更改

#include <stdio.h>
long long An(long long a) {
if (a > 2) {
    return a * (a - 1) * (a - 2) + An(a - 1);
} else {
    return 0;
}
}//定义函数An
int main() {
int n;
long long sum = 0;
scanf("%d", &n);
for (int i = 3; i <= n; i++) {
    sum = sum + An(i);
}
printf("%lld", sum);
return 0;
}

//12149993250000600

声明:Logic & Superegos ' House|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 数列求和——注意数据类型


Be water,my friend.