解题思路:
利用双层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 sn(int n); int main() { int a,temp=0; cout << "数入一个不超过20的数:"; cin >> a; for (int ac =1;ac<=a;ac++) { temp += sn(ac); } cout << temp; return 0; } int sn(int n ) { if (n == 0 || n ==1) return 1; return sn(n-1)*n; } 为什么只有五十分!!!
为什么用int代替long long只有50分 #include<iostream> using namespace std; int main() { int i,j,n; int a=1,sum=0; cin>>n; for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ a=a*j; } sum=sum+a; a=1; } cout<<sum<<endl; return 0; }
#include<iostream> using namespace std; int main() { int n; long long sn=0; cin>>n; for(int i=1;i<=n;i++) { int jc=1; for(int j=1;j<=i;j++) { jc*=j; } sn+=jc; } cout<<sn<<endl; return 0; } 这样为什么是错的呀
#include <iostream> using namespace std; int main () { int n; cin>>n; int a=1,s=0; for(int i=1;i<=n;i++){ a*=i; s+=a; } cout<<s; return 0; } 为什么显示答案错误?
20212320 2021-10-09 19:09:20 |
哦!看了这个解答,原来要的是循环输入,而不是输入一次就行
20212320 2021-10-09 19:13:19 |
#include <iostream> using namespace std; int main () { int n; while(cin>>n){ int a=0,b=1; for(int i=1;i<=n;i++){ b*=i; a+=b; } cout<<a<<endl; } return 0; }
20212320 2021-10-09 19:13:34 |
额,还是答案错误。。。
双人皮止住匕 2022-01-08 19:33:40 |
@uq_68475041576 s 和 a 的int改成long long
rnm退钱 2022-12-11 11:24:15 |
这里a*=i;的结果是a与i相乘(a=i*(i-1))而不是i的阶乘(i*(i-1)*(i-2)*......*1
SteveWang 2023-12-26 15:11:32 |
要将a,s定义为long long 型(长整型)
杨雨彤 2024-01-11 14:33:34 |
这个代码求得和不是每个数的阶乘和,而是每个数的阶乘的每一项的和
人工智能陈李毅 2024-10-30 14:56:20 |
@dotcpp0724648 ???
#include<bits/stdc++.h> using namespace std; int main() { int i,n,a=1; long long Sn=0; cin>>n; for(i=1;i<=n;i++) { a*=i; Sn+=a; } cout << Sn<<endl; }
#include<stdio.h> int main() { long long n,sn=0,i,a=1; scanf("%d",&n); for(i=1;i<=n;i++){ a=a*i; sn+=a; } printf("%ld\n",sn); } 这样好像就可以了
#include<stdio.h> int main() { int n,sn=0,i,a=1; scanf("%d",&n); for(i=1;i<=n;i++){ a=a*i; sn+=a; } printf("%d\n",sn); }
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:1175 |
数列 (C++代码)浏览:707 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:563 |
WU-图形输出 (C++代码)浏览:836 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:710 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:2121 |
水仙花 (C语言代码)浏览:1163 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:913 |