算数运算溢出和程序效率低下问题的解决

输入n,计算s=1!+2!+……+n!的末六位,n<=1e6,
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll n,m,a,b,c;
    m=1;a=0;
    scanf("%lld",&n);
    for (int j=1;j<=n;j++)
      {
          for (int i=1;i<=j;i++)
           {
             m*=i;
           }
      a+=m;m=1;
}

b=a%1000000;
printf("%lld",b);
}
上面的代码存在效率问题,下面的代码可以显示程序所需的时间,从而观察到时间变化:
#include<stdio.h>
#include<time.h>
int main()
{
    const int mod=1000000;
    int n,s=0;
    scanf("%d",&n);
    if(n>25)n=25;
        for (int i=1;i<=n;i++)
    {
        int factorial=1;
        for (int j=1;j<=i;j++)
            factorial=(factorial*j%mod);
        s=(s+factorial)%mod;
    }
    printf("%d\n",s);
    printf("Time used =%.2f\n",(double)clock()/CLOCKS_PER_SEC);
    return 0;}

输入数据过大时,所耗时间越多,因此可以仔细观察当n大于25时,结果都是940313,因此做出修改。






猜你喜欢

转载自blog.csdn.net/monster_ayb/article/details/79260303
今日推荐