注册 登录
编程论坛 C++教室

数列求和

小人儿 发布于 2019-11-28 20:19, 1648 次点击
III. 数列求和
从键盘输入一个整数n,编程求1*2+2*3+…+n*(n+1)的值,要求程序中不得出现while,for,if关键字。
提示:
1.    使用递归函数实现;
2.    使用?:运算符。
简单一些 谢谢大佬
2 回复
#2
rjsp2019-11-28 22:53
1*2 + 2*3 + 3*4 + …… + n*(n+1)
= (1*1 + 2*2 + 3*3 + …… + n*n) + (1+2+3+……+n)
= 1/6n(n+1)(2n+1) + 1/2n(n+1)
= n(n+1)(n+2)/3

为了防止 n(n+1)(n+2) 中间结果溢出,且又不允许用if,那变形为
n*(n+1)*(n+2)/3 = n/3*(n+1)*(n+2) + n%3*(n+1)*(n+2)/3
#3
雪影辰风2019-11-29 22:22
#include<cstdio>
#include<windows.h>
using namespace std;
long long ans=0;
int doit(int now) {
    return now>1?now*(now+1)+doit(now-1):1*2;
}
int main() {
    int n;
    scanf("%d",&n);
    printf("%d",doit(n));
    system("pause");
    return 0;
}
1