象帝之先


私信TA

用户名:scorpiowolf

访问量:78767

签 名:

科技改变世界,万物皆可编程。

等  级
排  名 43
经  验 12458
参赛次数 3
文章发表 53
年  龄 20
在职情况 学生
学  校 青岛理工大学琴岛学院
专  业 计算机科学与技术

  自我简介:

一个合格程序员的标准: 兴趣否? 持之以恒否? 耐寂寞钻研否? 挖掘机技术哪家强?

解题思路:


利用双层for循环嵌套,外层模拟每个阶乘数的累加,内层模拟每个数的阶乘,每次求出部分阶乘的结果,并加

入总结果中


注意事项:

本题输入变量的数据范围是20以内,大家可以试验实验输入19,会发现输出了一个负数,说明结果的大小超出

了int类的储存范围,故需要用long long类的变量来储存部分结果和总结果。

参考代码:

#include<iostream>
using namespace std ;
int main()
{
	long long sn = 0 ;//总结果
	int n ;//输入
	cin>>n ;
	long long sum = 1 ;//部分阶乘结果
	for(int i = 1;i <= n;i++)//每个阶乘数的累加
	{
		for(int j = 1;j <= i;j++)//阶乘内部计算
		{
			sum *= j ;
		}
		sn += sum ;//将每部分阶乘的计算结果加入总结果
		sum = 1 ;//回溯,初始化,方便储存下次循环的部分结果
	}
	cout<<sn<<endl ;//输出结果
	return 0 ;
}


 

0.0分

58 人评分

  评论区

#include<iostream>
using namespace std;
int main()
{
	int fac(int n);
    int n;
    int i;
    long long Sn=0;
    cin>>n;
    for(i=1;i<=n;i++)
    {
    	Sn=Sn+fac(i);
	}
    cout<<Sn;
    return 0;
}

int fac(int n)
{
    if(n==1)
    {
        return 1;
    }
    else
    return n*fac(n-1);
}
谁知道哪里错了?
2020-02-20 09:29:53
int factor(int n);
int main()
{
	int n,i;
	int fac=0;
	printf("please input n:");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	  fac+=factor(i);
	printf("1!+..%d!=%d",n,fac);
}
int factor(int n)
{
	int k,j=1;;
	for(k=1;k<=n;k++)
	j*=k;
	return j;
}
2020-02-11 21:33:13
#include<stdio.h>
int main() {
    long long n,a=1;
    long long Sn=0;
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
    a=a*i; 
    Sn=Sn+a;
}
	printf("%lld",Sn);
	return 0;
}
2020-02-11 14:59:56
#include<stdio.h>
int main()
{
	int a;
	long long n = 0, t = 1;    
	scanf("%d", &a);
		for ( int i = 1; i < a; i++)
		{
			t = t * (i + 1);
			n += t;
		}
		printf("%lld", n + 1);
	return 0;
}
2020-02-02 12:18:47
为嘛有错误
2020-01-02 17:30:39
请问为什么我用双精度表示19!开始出现错误?18!还是正确的
2019-04-26 19:22:53