(最近没写博客,现在恢复了)
题目:点此
题目描述:
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
思路:{
对于这道题,很容易想到两重循环,一重累加求和,另一重计算阶乘。
但我用的是优化过的方法。
根据阶乘的定义n!=(n-1)!*n,对于任意一个整数n,只要用一个变量存储(n-1)!,求n!就不用循环了,直接用(n-1)!*n就行了,这样算法的复杂度就是O(n)级别,根据n<20,复杂度是够低了。
}
犯的错误:{
1.累加器和存储(n-1)!的变量应是long long,不是int。
}
收获:{
阶乘,幂运算一般都用long long保险。
}
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin >> n; 7 long long sum=0,index=1; 8 for(int i=1;i<=n;i++){ 9 index*=i; 10 sum+=index; 11 } 12 cout << sum; 13 return 0; 14 }