LaserDisc8 @ 2022-05-25 10:00:04
第一段,用的unsignedlonglong,然后运行后结果不对。
#include"iostream"
using namespace std;
unsigned long long f(int x){
if(x==0||x==1)return 1;
unsigned long long c=1;
for(int i=1;i<=x;i++)
c*=i;
return c;
}
int main(){
int a;
unsigned long long sum=0;
cin>>a;
for(int m=1;m<=a;m++){
sum+=f(m);
}
cout<<sum;
return 0;
}
然后换了个大的,发现错误点又加了。但是自己运行对。是不是时间超了?
#include"iostream"
using namespace std;
long double f(int x){
if(x==0||x==1)return 1;
long double c=1;
for(int i=1;i<=x;i++)
c*=i;
return c;
}
int main(){
int a;
long double sum=0;
cin>>a;
for(int m=1;m<=a;m++){
sum+=f(m);
}
cout<<sum;
return 0;
}
by _Virgo_ @ 2022-05-25 10:06:36
@LaserDisc8 要用高精!!!
by _Virgo_ @ 2022-05-25 10:07:54
50!>=1e63吧
by _Virgo_ @ 2022-05-25 10:09:10
(50!)=31035053229546199656252032972759319953190362094566672920420940313
by LaserDisc8 @ 2022-05-25 11:13:02
@ly_潘烨 高精的话数组开太大会炸吧?
by _Virgo_ @ 2022-05-25 12:12:02
@LaserDisc8
会,但在此题不会。
这到题高精数组开个100差不多。(int类型)
因为50!+……+1!=31035053229546199656252032972759319953190362094566672920420940313
之前看错了,不是50!。
不过,49!仅仅是50!的零头,影响不大。