POJ 1001
//高精度,调试了很久,烦

1 #include <iostream>
2 #include <cstdio>
3 #include <string>
4 #include <cstring>
5 #include <vector>
6 #include <algorithm>
7
8 using namespace std;
9
10 const int MAX=1000;
11 int Ans[MAX], Num[10], N, Size;
12
13
14 void solve(const int n)
15 {
16 Size=N;
17 int temp[MAX];
18 for( int i=1; i<n; ++i )
19 {
20 memset(temp, 0, sizeof(temp) );
21 for( int j=0; j<N; ++j )
22 {
23 for( int k=0; k<Size; ++k )
24 {
25 temp[k+j]+=Num[j]*Ans[k];
26 }
27 }
28 for( int k=0; k<Size+N; ++k )
29 {
30 Ans[k]=temp[k]%10;
31 temp[k+1]+=temp[k]/10;
32 }
33 for( Size=Size+N; ; Size-- )
34 {
35 if( Ans[Size]>0 )
36 break;
37 }
38 Size++;
39 }
40 }
41
42 int main()
43 {
44 freopen("in", "r", stdin);
45 freopen("out", "w", stdout);
46 char r[10];
47 int n;
48 int size, i, b;
49 int dotpos;
50 while( scanf("%s%d", r, &n)!=EOF )
51 {
52 memset(Ans, 0, sizeof(Ans));
53 size=strlen(r);
54 for(i=size-1; i>=0; --i)
55 {
56 if( r[i]!='0' )
57 break;
58 else
59 r[i]=0;
60 }
61 for( int j=i; j>=0; --j )
62 {
63 if( r[j]=='.' )
64 {
65 dotpos=i-j;
66 break;
67 }
68 }
69 for( b=0; b<=i; ++b )
70 {
71 if( r[b]!='0' && r[b]!='.' )
72 break;
73 }
74 N=0;
75 for( int j=i; j>=b; --j )
76 {
77 if( r[j]=='.' )
78 continue;
79 else
80 {
81 Num[N]=r[j]-'0';
82 Ans[N]=Num[N];
83 ++N;
84 }
85 }
86 int dot=dotpos;
87 solve(n);
88 dotpos*=n;
89 if( dotpos>=Size )
90 {
91 Ans[dotpos]=11;
92 Size=dotpos+1;
93 }
94 else
95 {
96 for( int i=Size; i>dotpos; --i )
97 {
98 Ans[i]=Ans[i-1];
99 }
100 Ans[dotpos]=11;
101 Size++;
102 }
103 for( b=0; b<Size; ++b )
104 {
105 if( Ans[b]!=0 )
106 break;
107 }
108 if( Ans[b]==11 )
109 b++;
110 for( int i=Size-1; i>=b; --i )
111 {
112 if( Ans[i]==11 )
113 printf(".");
114 else
115 printf("%d", Ans[i]);
116 }
117 printf("\n");
118 }
119 return 0;
120 }
121
2 #include <cstdio>
3 #include <string>
4 #include <cstring>
5 #include <vector>
6 #include <algorithm>
7
8 using namespace std;
9
10 const int MAX=1000;
11 int Ans[MAX], Num[10], N, Size;
12
13
14 void solve(const int n)
15 {
16 Size=N;
17 int temp[MAX];
18 for( int i=1; i<n; ++i )
19 {
20 memset(temp, 0, sizeof(temp) );
21 for( int j=0; j<N; ++j )
22 {
23 for( int k=0; k<Size; ++k )
24 {
25 temp[k+j]+=Num[j]*Ans[k];
26 }
27 }
28 for( int k=0; k<Size+N; ++k )
29 {
30 Ans[k]=temp[k]%10;
31 temp[k+1]+=temp[k]/10;
32 }
33 for( Size=Size+N; ; Size-- )
34 {
35 if( Ans[Size]>0 )
36 break;
37 }
38 Size++;
39 }
40 }
41
42 int main()
43 {
44 freopen("in", "r", stdin);
45 freopen("out", "w", stdout);
46 char r[10];
47 int n;
48 int size, i, b;
49 int dotpos;
50 while( scanf("%s%d", r, &n)!=EOF )
51 {
52 memset(Ans, 0, sizeof(Ans));
53 size=strlen(r);
54 for(i=size-1; i>=0; --i)
55 {
56 if( r[i]!='0' )
57 break;
58 else
59 r[i]=0;
60 }
61 for( int j=i; j>=0; --j )
62 {
63 if( r[j]=='.' )
64 {
65 dotpos=i-j;
66 break;
67 }
68 }
69 for( b=0; b<=i; ++b )
70 {
71 if( r[b]!='0' && r[b]!='.' )
72 break;
73 }
74 N=0;
75 for( int j=i; j>=b; --j )
76 {
77 if( r[j]=='.' )
78 continue;
79 else
80 {
81 Num[N]=r[j]-'0';
82 Ans[N]=Num[N];
83 ++N;
84 }
85 }
86 int dot=dotpos;
87 solve(n);
88 dotpos*=n;
89 if( dotpos>=Size )
90 {
91 Ans[dotpos]=11;
92 Size=dotpos+1;
93 }
94 else
95 {
96 for( int i=Size; i>dotpos; --i )
97 {
98 Ans[i]=Ans[i-1];
99 }
100 Ans[dotpos]=11;
101 Size++;
102 }
103 for( b=0; b<Size; ++b )
104 {
105 if( Ans[b]!=0 )
106 break;
107 }
108 if( Ans[b]==11 )
109 b++;
110 for( int i=Size-1; i>=b; --i )
111 {
112 if( Ans[i]==11 )
113 printf(".");
114 else
115 printf("%d", Ans[i]);
116 }
117 printf("\n");
118 }
119 return 0;
120 }
121