|  | 
 
| 
平台错误提示是
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  [Test #1 0.in]
 [Test 0.out] Wrong answer on line 17
 Yours:
 -501043139481094097
 Correct:
 378011820620313
 题目是
 输入一个正整数n
 ,计算1!+2!+⋯+n!
 输入描述
 多组输入,每行一个数字n
 (n≤17
 )
 
 输出描述
 对于每一行输入,输出1!+2!+3!+...+n!
 的结果
 (注意结果可能超出int的范围)
 
 复制代码#include<stdio.h>
int main()
{
    long long n,i,a,sum=0,t=1;
    while(scanf("%lld",&n)!=EOF)
    {
    for(i=1;i<=n;i++)
    {
            for(a=1;a<=i;a++)
        {
            t=a*t;
        }
            sum=sum+t;
    }
    printf("%lld\n",sum);
        sum=0;t=1;
    }
}
这个程序的问题在于阶乘计算时没有将t清零,导致每次计算的结果都叠加在了一起。解决方法是在计算每个数的阶乘前将t清零。
 修改后的代码如下:
 
 
 复制代码#include <stdio.h>
int main()
{
    long long n, i, a, sum = 0, t = 1;
    while (scanf("%lld", &n) != EOF)
    {
        for (i = 1; i <= n; i++)
        {
            t = 1; // 清零
            for (a = 1; a <= i; a++)
            {
                t = a * t;
            }
            sum = sum + t;
        }
        printf("%lld\n", sum);
        sum = 0;
    }
    return 0;
}
 | 
 |