1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 int a[3000],d[3000],n;
 6 void cheng(int a1)
 7 {
 8     for(int i=1;i<=a[0];i++)
 9       a[i]*=a1;
10     for(int i=1;i<a[0];i++)
11       {
12         a[i+1]+=a[i]/10000;
13         a[i]%=10000;
14       }
15     for(;a[a[0]]>=10000;)
16       {
17         a[a[0]+1]=a[a[0]]/10000;
18         a[a[0]]%=10000;
19         a[0]++;
20       }
21     return;
22 }
23 int xun(int a1)
24 {
25     if(a1<10)
26       return 1;
27     if(a1<100)
28       return 2;
29     if(a1<1000)
30       return 3;
31     return 4;
32 }
33 int main()
34 {
35     a[0]=1;
36     a[1]=1;
37     scanf("%d",&n);
38     for(;n>4;)
39       {
40         n-=3;
41         cheng(3);
42       }
43     cheng(n);
44     for(int i=1;i<=a[0];i++)
45       d[i]=xun(a[i]);
46     printf("%d\n",(a[0]-1)*4+d[a[0]]);
47     printf("%d",a[a[0]]);
48     int i;
49     for(i=a[0]-1;i>=max(1,a[0]-24);i--)
50       {
51         if(d[i]==1)
52           printf("000%d",a[i]);
53         if(d[i]==2)
54           printf("00%d",a[i]);
55         if(d[i]==3)
56           printf("0%d",a[i]);
57         if(d[i]==4)
58           printf("%d",a[i]);
59       }
60     if(i!=0)
61       {
62         if(d[a[0]]==3)
63           printf("%d",a[i]/1000);
64         if(d[a[0]]==2)
65           printf("%d",a[i]/100);
66         if(d[a[0]]==1)
67           printf("%d",a[i]/10);
68       }
69     return 0;
70 }

一个数分成的数乘积最大 要尽量分3,数据范围要求要用高精压位。

posted on 2016-03-04 22:52  xiyuedong  阅读(146)  评论(0编辑  收藏  举报