不会用高精度,求助(才得了50分)

P1009 [NOIP1998 普及组] 阶乘之和

弄错了,是#include<iostream> //#include<stdio.h> using namespace std; int main(){ //freopen("o.in", "r", stdin); //freopen("o.out", "w", stdout); unsigned long long int n,i,num=0,i2,num2; cin>>n; for(i=1;i<=n;i++){ for(i2=i,num2=1;1<=i2;i2--){ num2*=i2; } num+=num2; } cout<<num; return 0; }
by pencil @ 2018-11-03 11:10:11


那就用高精啊
by resftlmuttmotw @ 2018-11-03 11:10:46


``` #include<iostream> //#include<stdio.h> using namespace std; int main(){ //freopen("o.in", "r", stdin); //freopen("o.out", "w", stdout); unsigned long long int n,i,num=0,i2,num2; cin>>n; for(i=1;i<=n;i++){ for(i2=i,num2=1;1<=i2;i2--){ num2*=i2; } num+=num2; } cout<<num; return 0; } ``` ------------ ~~就这code~~ 能得50?!
by resftlmuttmotw @ 2018-11-03 11:12:58


``` #include<stdio.h> int len=1,t[10001],ans[10001],anslen,n; int max(int x,int y) { if(x<y) return y; if(x>=y) return x; } void jiecheng(int v) { for(int i=1;i<=len;i++) t[i]*=v; int i=1; while(t[i]>9||i<len) { t[i+1]+=t[i]/10; t[i]%=10; i++; } len=i; } void jia() { for(int i=1;i<=len;i++) {ans[i]+=t[i]; if(ans[i]>9) { ans[i+1]+=ans[i]/10; ans[i]%=10; anslen=max(anslen,i+1); } anslen=max(anslen,i); } } int main() { scanf("%d",&n); t[len]=1; for(int i=1;i<=n;++i) {jiecheng(i); jia();} for(int i=anslen;i>=1;--i) printf("%d",ans[i]); return 0; } ```
by wwz20050323 @ 2018-11-03 11:18:48


@[pencil](/space/show?uid=137723)
by wwz20050323 @ 2018-11-03 11:19:00


本题需要高精乘&高精加 高精加(非负数的) ```cpp #include<cstdio> #include<string> #include<iostream> using namespace std; string twosum(string a,string b) { string c; int i=a.size()-1,j=b.size()-1,carry=0; for(;i>=0||j>=0;i--,j--) { int s1= i>=0? a[i]-'0':0; int s2= j>=0? b[j]-'0':0; int s3=(s1+s2+carry)%10; carry=(s1+s2+carry)/10; c.insert(c.begin(),s3+'0'); } if(carry) c.insert(c.begin(),'1'); return c; } int main() { string a,b; cin>>a>>b; puts(twosum(a,b).c_str()); } ```
by resftlmuttmotw @ 2018-11-03 11:19:17


@楼上几位大佬 double 应该就够了
by 洛倾然 @ 2018-11-09 18:03:57


|