最近在洛谷上面看到一题,就想做个笔记,有关于高精度的题目
题目:求sum=1!+2!+3!+4!+...+n! (n<=50)
注意:用一般的c++方法肯定会超出精度,python自然不会(但是icpc与ccpc都不能用python呐),所以可以用python打表
python打表代码:
n=eval(input())
ans=0
d=1
for i in range(1,n+1):
d*=i
ans+=d
print(ans)
思路:这题呢,就是每一位乘,然后再往前进
不采用打表的完整这题的c++代码如下:
#include
#include<cstring>
using namespace std;
int a[1000],b[1000],alen=1,blen=1,n;
int main(){
cin>>n;
memset(b,0,sizeof b);
memset(a,0,sizeof a);
a[1]=b[1]=1;
for(int i=2;i<=n;i++){
int x=0;
for(int j=1;j<=alen;j++){
a[j]=a[j]*i+x;
x=a[j]/10;
a[j]%=10;
}
while(x){
a[++alen]=x%10;
x/=10;
}
if(blen<alen)blen=alen;
for(int j=1;j<=blen;j++){
b[j]=b[j]+a[j]+x;
x=b[j]/10;
b[j]%=10;
}
while(x){
b[++blen]=x%10;
x/=10;
}
for(int i=blen;i>0;i--)
cout<<b[i];
cout<<endl;
}
for(int i=blen;i>0;i--)
cout<<b[i];
cout<<endl;
return 0;
}
网友评论