(A - 整数划分 HYSBZ - 1263)(数组模拟大数乘法)

时间:2023-01-09 20:03:45

题目链接: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 ;
}