解题思路:
思路没什么好说的,不考虑时间复杂度的话可以循环加递归求和求解。第二种是利用阶乘求和的性质,避免重复运算达到时间复杂度的优化。
直接上手第二种,边求阶乘边求和。
注意事项:
百分之五十错误的代码基本都是定义的变量范围过小,导致部分大数的程序产生错误。诸如int , float ,double都会超范围。
直接告诉大家,一般大数或者大数组,直接开全局变量或者是用 long long 类型,此题用 long long或者是long double 类型可以完美AC。
附上各变量范围:
整型[signed]int -2147483648~+2147483648
无符号整型unsigned[int] 0~4294967295
短整型 short [int] -32768~32768
无符号短整型unsigned short[int] 0~65535
长整型 Long int -2147483648~+2147483648
无符号长整型unsigned [int] 0~4294967295
字符型[signed] char -128~+127
无符号字符型 unsigned char 0~255
单精度 float 3.4 x 10^(-38)~ 3.4 x 10^(+38)
双精度double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
长双精度 long double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
long long sn = 1;
long long sum = 0;
cin>>n;
for(int i = 1; i <= n; i++)
{
sn = sn * i;
sum = sum + sn;
}
printf("%0.lld",sum);
return 0;
}
0.0分
19 人评分
#include<stdio.h> int n=0; long long f(n) { if (n == 1 || n == 0) return 1; else return f(n - 1)*n; } long long s(n) { if (n == 1) return 1; else return s(n - 1) + f(n); } int main() { scanf("%d", &n); if (n <= 20) { printf("%d", s(n)); } return 0; } 求大佬康康我,运行没有问题,也改成长整型了,可还是错了
#include<iostream> using namespace std; int main() { int fac(int n); int n; int i; long long Sn=0; cin>>n; while(n>20) { cout<<"输入错误请重新输入20以内的整数"; 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); } 为啥还是错误50% 有大神看看吗
#include <stdio.h> int main() { int i=0,j=0,n=0; long long int Sn=0,m=1; scanf("%d",&n); for(j=n;j>0;j--) { m=1; for(i=j;i>0;i--) { m=m*i; } Sn=Sn+m; } printf("%d",Sn); return 0; } 变量范围已经改过了,为什么还是50%的错误,是内存超范围了吗?怎么检查内存有没有超出范围?
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:758 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:598 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:438 |
兰顿蚂蚁 (C++代码)浏览:1089 |
回文串 (C语言代码)浏览:2838 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:884 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1135 |
DNA (C语言描述,数据结构)浏览:850 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:652 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:668 |
七月 2021-03-12 11:41:37 |
long 不够,要long long