解题思路: 首先我们先了解整型家族(字符、短整型、整型、长整型)的变量的最小范围
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 人评分
大家能帮忙看看这个哪里出错了 #include<stdio.h> int main() { long long int a,Sn,b; int x,n; b=1; Sn=0; x=1; scanf("%d",&n); while(x<=n) { Sn=Sn+b; a=b; x++; b=a*x; } printf("%d",Sn); return 0; }
#include <stdio.h> int factorial(int n); int main(){ int n; long long res=0; scanf("%d",&n); for(n;n>=1;n--){ res+=factorial(n); } printf("%lld",res); return 0; } int factorial(int n){ int a=0; if(n>1){ a=n*factorial(n-1); }else a=1; return a; } 为什莫这样子不行呀,输入20出来的不是正确答案,求解答呜呜呜
#include<stdio.h> int main() { int n,Sn=0,i,m=1; scanf("%d",&n); for(i=1;i<=n;i++) { m=m*i; Sn=Sn+m; } printf("%d\n",Sn); } 大佬们,为啥答案不对啊?
uq_27648537331 2023-08-09 08:55:07 |
int类型最大只到2的32次方减一,你这Sn和m到后面都不够用了
想吃德芙 2023-08-10 21:18:53 |
@uq_27648537331 这个我看其他的文章给改了,然后换成了这样 #include<stdio.h> int main() { int n; long long int a=0,m=1; scanf("%d",&n); for (int i=1;i<=n;i++) { m *= i; a += m; } printf("%d ",a); } 这时候输入5是正确的但是输入20就是错的,把printf(“%11d”,a)改成这样的话,输入的两个值就都不对了,不知道为啥,求大佬指教一下
想吃德芙 2023-08-10 21:19:17 |
@uq_27648537331 这个我看其他的文章给改了,然后换成了这样 #include<stdio.h> int main() { int n; long long int a=0,m=1; scanf("%d",&n); for (int i=1;i<=n;i++) { m *= i; a += m; } printf("%d ",a); } 这时候输入5是正确的但是输入20就是错的,把printf(“%11d”,a)改成这样的话,输入的两个值就都不对了,不知道为啥,求大佬指教一下
想吃德芙 2023-08-10 21:27:12 |
#include<stdio.h> int main() { int n; long long int a=0,m=1; scanf("%d",&n); for (int i=1;i<=n;i++) { m *= i; a += m; } printf("%d ",a); }
想吃德芙 2023-08-10 21:28:03 |
上面的粘贴下来粘贴错了是这个
#include <stdio.h> int main(){ long long int jc(int n); long long int y=0,u=0; int n,i=1; scanf("%d",&n); if(n!=0){ for(i;i<=n;i++){ u=u+jc(i); } printf("%lld",u); } else{ printf("%lld",1); } return 0; } long long int jc(int n){ long long int x=1; if(n==0){ x=1; } else{ x=n*jc(n-1); } return x; }
已经把类型改成long long怎么还错,求解。 #include <stdio.h> int main() { int i,n, long long sum=1; long long k=0; scanf("%d",&n); for(i=1;i<=n;i++){ sum=sum*i; k=k+sum; } printf("%lld",k); return 0; }
hweuihf 2023-04-18 11:11:29 |
int i,n;这样子才对,忘记加分号了
哪有问题啊?? #include<stdio.h> int main() { int n,i,t = 1,s = 0; scanf("%d",&n); for(i = 1;i <= n;i++) { t = t * i; s = s + t; } printf("%d",s); return 0; }
#include<stdio.h> int main() { int n; long int A=1; long int Sn=0; scanf("%d",&n); for(int i=1;i<=n;i++) { A=A*i; Sn=Sn+A; } printf("%lld\n",Sn); return 0; }
矩形面积交 (Java代码)浏览:1281 |
字符串对比 (C语言代码)浏览:1471 |
关于C语言变量位置的问题浏览:294 |
数组与指针的问题浏览:760 |
蓝桥杯历届试题-翻硬币 (C++代码)浏览:954 |
Quadratic Equation (C语言代码)浏览:1034 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:560 |
A+B for Input-Output Practice (III) (C语言代码)浏览:455 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:852 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:461 |
豚豚 2023-11-08 07:49:56 |
printf那里lld