URAL1222

来源:互联网 发布:网络打字员是真是假 编辑:程序博客网 时间:2024/06/02 02:06

题意:

把n拆分成几个数,把这些数乘起来最大。

思路:

3越多越好。

对4,5特判一下,4的时候是2*2大,5的时候还剩个2,那么就是n%3=1的话,我们先拿个4,n%3==2的话就是先拿个2,后面把有多少个3乘起来就好了;

#include <cstdio>#include <iostream>using namespace std;#define maxn 3022int n, step;int ans[maxn];int main(){scanf("%d", &n);if(n==1){printf("1\n");return 0;}int num=1;if(n%3==0){ans[1]=1;}if(n%3==1){ans[1]=4;n-=4;}if(n%3==2){ans[1]=2;n-=2;}step=n/3;for(int i=1;i<=step;++i){for(int j=1;j<=num;++j)             ans[j]*=3;for(int j=1;j<=num+1;++j){ans[j+1]+=ans[j]/10;ans[j]%=10;}int k=num;while(ans[k+1]!=0)++k;num=k;}for(int i=num;i>=1;--i)        printf("%d",ans[i]);printf("\n");return 0;}


0 0
原创粉丝点击