为什么我全错了,题解对了呀

P1249 最大乘积

``` #include <stdio.h> int main() { long long n; scanf("%lld",&n); long long now = 0; long long count = 1; long long last = 0; long long normal = 0; for(int i = 2;i < n;i++) { now = now + i; if(now > n) { normal = i - 1; last = n-now+i+i-1; break; } } for(int i = 2;i < normal;i++) { count = count * i; printf("%lld ",i); } printf("%lld\n",last); count = count*last; printf("%lld",count); return 0; } ```
by _KaQqi @ 2019-03-09 11:52:24


@[_KaQqi](/space/show?uid=68055) 没记错的话这题好像要写高精……
by ywy_c_asm @ 2019-03-09 11:55:28


嗯是要高精
by ViXpop @ 2019-03-09 12:14:48


@[ywy_c_asm](/space/show?uid=125124) 如何做到高精度呢...
by _KaQqi @ 2019-03-09 12:17:12


```cpp #include<bits/stdc++.h> using namespace std; struct bi{ static const int N=5000; int a[N]; bi(){ memset(a,0,sizeof(a)); a[0]=1; } void print(){ for(int i=a[0];i>=1;i--)cout<<a[i]; } bi operator * (const int b) const{ bi a=*this; for(int i=a.a[0];i>=1;i--)a.a[i]*=b; for(int i=a.a[0];i>=1;i--){ a.a[i+1]+=a.a[i]/10; a.a[i]%=10; if(a.a[a.a[0]+1])a.a[0]++; } while(a.a[a.a[0]]==0&&a.a[0]>1)a.a[0]--; return a; } }; int main(){ int n; cin>>n; int sum=0,sz=0; int a[10000]; for(int i=2;sum+i<=n;i++){ a[++sz]=i; sum+=i; } int x=n-sum,pos=sz; while(x--){ a[pos--]++; if(pos==0)pos=sz; } bi T; T.a[1]=1; for(int i=1;i<=sz;i++){ cout<<a[i]<<" "; T=T*a[i]; } cout<<endl; T.print(); } ``` 包含一个高精模板
by nick_haoran @ 2019-04-13 20:46:39


```cpp #include<bits/stdc++.h> using namespace std; struct bi{ static const int N=5000; int a[N]; bi(){ memset(a,0,sizeof(a)); a[0]=1; } void print(){ for(int i=a[0];i>=1;i--)cout<<a[i]; } bi operator * (const int b) const{ bi a=*this; for(int i=1;i<=a.a[0];i++)a.a[i]*=b; for(int i=1;i<=a.a[0];i++){ a.a[i+1]+=a.a[i]/10; a.a[i]%=10; if(a.a[a.a[0]+1])a.a[0]++; } while(a.a[a.a[0]]==0&&a.a[0]>1)a.a[0]--; return a; } }; int main(){ int n; cin>>n; int sum=0,sz=0; int a[10000]; for(int i=2;sum+i<=n;i++){ a[++sz]=i; sum+=i; } int x=n-sum,pos=sz; while(x--){ a[pos--]++; if(pos==0)pos=sz; } bi T; T.a[1]=1; for(int i=1;i<=sz;i++){ cout<<a[i]<<" "; T=T*a[i]; } cout<<endl; T.print(); } ``` 刚刚写错了
by nick_haoran @ 2019-04-13 20:54:31


|