解题思路: 首先我们先了解整型家族(字符、短整型、整型、长整型)的变量的最小范围
1.因为这是阶乘求和,一般的int 类型可能就不够,因此我们利用long long int 类型(不用unsigned long 因为当n为20时,Sn =2561327494111820313)
了,unsigned long的范围不够。
2.求Sn的和,我·用的是两个for循环嵌套
for (int i = 1; i <= n; i++) { j = 1; //要在外面for循环执行完一次就初始化一次,要不就带入了内层for循环的值 for(int m = 0; m < i; m++) j *= (m + 1); //求出第n个数的n的阶乘 Sn = Sn + j; //依次加上阶乘数 }
还可以把我这两个for嵌套变为一个
//借鉴 渴望学到知识的菜鸟 这位博主用的代码 for (int i = 1; i <= n; i++) { t *= i; sum += t; }
注意事项: 可能很多人多把变量的类型设为int类型导致错误,这里是long long int类型比较合适
参考代码:
#include <stdio.h> int main(void) { int n; long long Sn = 0, j; scanf("%d", &n); for (int i = 1; i <= n; i++) { j = 1; for(int m = 0; m < i; m++) j *= (m + 1); Sn = Sn + j; } printf("%lld", Sn); //long long的格式指定符为%lld return 0; }
0.0分
110 人评分
为什么我的代码不对呢题目不是限制n小于20吗为什么要用很大的范围 #include<stdio.h> int main() { int n,sum,i,k; sum=0; scanf("%d",&n); k=1; while(n>0) { i=n; while(i>0) { k=k*i; i--; } sum=sum+k; k=1; n--; } printf("%d",sum); return 0; }
#include<stdio.h> int main() { int n; long long x=1,Sn=0; scanf("%d",&n); if(n==0){ Sn=0; }else{ for(int i=1;i<=n;i++){ x=x*i; Sn=Sn+x; } } printf("%lld",Sn); return 0; }
哥哥姐姐们可以帮我看看我的错在哪里吗 一直都是0TAT #include<stdio.h> int main() { int a,b; int all=0; int sum=1; int n; scanf("%n",&n); a=1; b=1; for(b=1;b<=n;b++) { for(a=1;a<=b;a++) { sum=sum*a; } all=all+sum; sum=1; a=1; } printf("%d",all); return 0; }
WannaBe 2024-03-09 12:08:12 |
首先,你重复多次定义了a,b,看你的用法,你应该是想在for循环中使用a,b作为临时变量,你可以在for开头定义,例如for(int b=0;;)
WannaBe 2024-03-09 12:12:47 |
其次,你的占位符用错了!!这是最主要原因,你的scanf中用了%n,而非%d !!!!
WannaBe 2024-03-09 12:13:52 |
第三,就本题而言,最好不要使用int类型,应该使用更大的类型,如long long int
WannaBe 2024-03-09 12:14:43 |
第四,从你的代码可以看出,你的基础较为薄弱,建议你最好先学好语法,再来刷题哈,这样比较事半功倍
WannaBe 2024-03-09 12:15:57 |
第五,我也是菜鸡,不要感觉受到打击哈,饭要一口口吃,咱俩共勉
我是小米 2024-03-11 21:17:38 |
@dotcpp0704046 谢谢你宝宝!我懂了 非常感谢
#include<stdio.h> int main() { int n,i; int long long a=1; int long long sn=0; scanf("%d",&n); for(i=1;i<=n;i++){ a=a*i; sn=sn+a; } printf("%d",sn); return 0; }有没有大佬解答我这个为什么错了啊
WannaBe 2024-03-09 12:17:19 |
long long int吧,可能写反了?
#include<stdio.h> void sum(int begin,int n) { int i; long long s=0; long long sum =1; for(i=begin;i<=n;i++){ sum*=i; s+=sum;} printf("%lld\n",s); } int main() { int n; scanf("%d",&n); sum(1,n); return 0; }
#include<stdio.h> unsigned long fun(int n) { if (n == 1) return 1; else return n * fun(n -1); } int main() { int n = 0, sum = 0; scanf("%d", &n); for(int i = 1; i <= n; i++) { sum += fun(i); } printf("%1d", sum); return 0; } 谁帮我看看为什么第二个测试点过不了呀,只能得50分呜呜呜
WannaBe 2024-03-09 12:16:47 |
sum为int,可能不够大,用longlongint试试
#include<stdio.h> int main(){ int n,i; long long sn=0,j; scanf("%d",&n); for(i=1;i<=n;i++){ int a=1; for(j=1;j<=i;j++) a*=j; sn+=a; } printf("%lld",sn); return 0; }错在哪里了?为什么第二个测试过不了?和上面的代码没区别啊
芙宁娜爱敲代码 2024-01-18 11:35:24 |
哈!我想了半天,才发现你的a没变成longlong类型
#include <stdio.h> int jc(int a); int main() { long long int n, Sn = 0, i; scanf("%d", &n); for(i = 1;i <= n;i++) { Sn += jc(i); } printf("%lld", Sn); return 0; } int jc(int a) { long long int num; if(a == 1) return 1; num = a * jc(a - 1); return num; } 求大佬看看为啥只有50分
学无止境 2023-11-24 18:46:32 |
我不李姐,因为我也是50分
H2330819056 2023-12-09 16:12:41 |
调用函数也要是long long
【数组的距离】 (C语言代码)浏览:787 |
简单的a+b (C语言代码)浏览:641 |
The 3n + 1 problem (C语言代码)浏览:603 |
DNA (C语言描述,蓝桥杯)浏览:1653 |
用筛法求之N内的素数。 (C语言代码)浏览:711 |
循环入门练习5 (C语言代码)浏览:907 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:985 |
矩阵的对角线之和 (C语言代码)浏览:1401 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:532 |
WannaBe 2024-03-14 10:21:11 |
因为阶乘到最后会很大很大,你可以百度一下20的阶乘