序列求和
2021/7/8 23:08:50
本文主要是介绍序列求和,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
序列求和
问题描述
求1+2+3+4+...+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+4+...+n的值。
思路
求从1加到n的值,使用C++语言编写,先要弄清输入与输出值的类型,要避免当n的数值过大时产生数据溢出,int型数据的范围为-2147483648~2147483647(-231~231-1),long long数据类型的范围为-9223372036854775808~9223372036854775807 (-263~263-1),为避免数据规模过大,使用long long 型作为输入输出的类型。然后是计算结果的思路,这里列出3种,第一种循环累加这里使用for循环累加;第二种数学公式计算,这里为等差数列,等差数列求和公式为an=(a1+an)*n/2;第三种是递归求和方法。
代码
for循环累加法
#include<iostream> #include<time.h> using namespace std; int main() { long long n,sum=0; clock_t start, end; double time; cin >> n; start = clock(); for (; n > 0;n--) { sum += n; } cout << sum<<endl; end = clock(); time = (double)(end-start); cout << time << "ms"; return 0; }
这里使用了C库函数中的<time.h>,clock_t clock(void)返回程序执行起(一般为程序的开头),处理器时间钟所使用的时间。time=(double)(end-start)得到代码计算出结果所耗费时间。 使用for循环累加时要注意,当数据规模过大时,这种方法往往会导致超时,资源占用率高。
等差数列公式法
#include <iostream> #include <time.h> using namespace std; int main() { long long int n; clock_t start, end; double time; cin >> n; start = clock(); cout << (1 + n)* n / 2<<endl; end = clock(); time =(double)(end - start); cout << time<<"ms"; return 0; }
直接使用公式计算,所耗时间短,占用计算少,数据规模过大时也能进行很好计算。
递归求和法
#include<iostream> #include<time.h> using namespace std; long long int fun(long long int n) { if (n >= 1) { return n+fun(n - 1); } else { return 0; } } int main() { clock_t start, end; double time; long long int n, sum; cin >> n; start = clock(); sum = fun(n); cout << sum << endl; end = clock(); time = (double)(end - start); cout << time; return 0; }
当数值在一定数值范围内计算效果最优,但超过一定数值计算效果公式法优。
这篇关于序列求和的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南