题目描述:
输入n, 计算S= 1! + 2! + 3! + …+ n! 的末6位( 不含前导0 )n≤10^6, n!表示前n个正整数之积。
样例输入:
10
样例输出:
37913
题目分析:
这道题目看似是很简单的一个循环问题,实际上这个题目还是有很多坑的,例如数据溢出、时间效率问题。肯定会有同学上手就用下面的代码来做(这个题是在楼主刚学习没有多久的时候做的),这很正常,经过测试的同学就能知道这个代码就存在着上述我说的那些问题。
这个代码只适用于N的次数较少的做法,并不能满足这个题的需求,放在这就当作是一个反例吧!!!
#include<iostream>
using namespace std;
int main()
{
int T,n=1,sum=0;
cin>>T;
for(int i=1;i<=T;i++)
{
n=n*i; //每一次阶乘
sum+=n; //阶乘加和
}
cout<<sum%1000000<<endl;//后六位
return 0;
}
改进一(解决数据溢出问题):
让我们重新来看这个问题,这个题最终要求的是N!之