题目链接:https://cn.vjudge.net/problem/HYSBZ-1263
题目大意:中文题目
具体思路:先进了能的拆成3,如果当前剩下的是4,就先不减去3,直接乘4,如果还剩2的话,也乘2。
如果当n==4的时候,我们将n拆成2*2.如果当n>=5的时候,如果按照4拆的话,显然不如3*2的数大.
AC代码:
#include<iostream>
#include<stack>
#include<stdio.h>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
# define ll long long
const int maxn = 3e4+;
int sto[maxn];
int p=;
void cal(int t)
{
sto[p]*=t;
for(int i=p; i>=; i--){
sto[i-]=t*sto[i-]+sto[i]/;
sto[i]%=;
}
}
int main()
{
int n;
scanf("%d",&n);
sto[p]=;
n-=;
while(n){
if(n==){
cal();n-=;
}
else if(n==){
cal();n-=; }
else{
cal();
n-=;
}
}
p=;
while(sto[p]==)
p++;
printf("%d\n",-p+);
for(int i=p; i<=min(p+-,); i++)//要求输出前100位
{
printf("%d",sto[i]);
}
printf("\n");
return ;
}