PKU-1001
1 #include<iostream>
2 using namespace std;
3 #define MAX 1000
4 int a[MAX],b[MAX],c[MAX],flag;
5 int lenr,lena,lenb,lenc,len,temp,digit;
6 char r[MAX];
7
8 int main()
9 {
10 int i,j,k,n;
11 while( scanf("%s%d",r,&n)!=EOF )
12 {
13 if(n==0)
14 {
15 printf("1\n");
16 continue;
17 }
18 lenr = strlen(r);
19 if(lenr==1 && r[0]=='0')
20 {
21 printf("0\n");
22 continue;
23 }
24 for(i=0; i<lenr; ++i)
25 if(r[i]!='.'&&r[i]!='0')
26 break;
27 if(i==lenr)
28 {
29 printf("0\n");
30 continue;
31 }
32 if(strchr(r,'.')==NULL) //¿¼ÂÇûÓÐСÊýµãµÄÇé¿ö
33 {
34 r[lenr] = '.';
35 r[lenr+1]='\0';
36 lenr++;
37 }
38 for(i=0; i<lenr-1; ++i)
39 {
40 if(r[i]!='0')
41 break;
42 if(r[i]=='0' && r[i+1]=='.')
43 {
44 strcpy(r,r+i);
45 break;
46 }
47 if(r[i]=='0' && r[i+1]!='0')
48 {
49 strcpy(r,r+i+1);
50 break; //È¥µôaµÄÇ°µ¼0
51 }
52 }
53 //cout<<r<<endl;
54 lenr = strlen(r)-1;
55 for(i=0; r[i]; ++i)
56 if(r[i]=='.')
57 break;
58 digit = lenr-i; //¼Ç¼СÊýµãλÊý
59 for(j=i; r[j]; ++j)
60 r[j] = r[j+1];
61 lenr--;
62 for(i=0; i<=lenr/2; ++i) //Êýλ·´×ª£¬±ãÓÚ¼ÆËã
63 {
64 temp = r[i];
65 r[i] = r[lenr-i];
66 r[lenr-i] = temp;
67 }
68 for(i=0; r[i]; ++i)
69 b[i] = a[i] = r[i]-'0';
70 lenb = lena = lenr;
71 for(i=1; i<=n-1; ++i) //¼ÆËãn´Î·½
72 {
73 for(j=0; j<=lenb; ++j)
74 for(k=0; k<=lena; k++)
75 {
76 c[j+k] += a[k]*b[j];
77 c[k+j+1] += c[j+k]/10;
78 c[j+k] %= 10;
79 }
80 k--;
81 j--;
82 if(c[k+j+1] != 0)
83 lenc = j+k+1;
84 else
85 lenc = j+k;
86
87 for(j=0; j<=lenc; ++j)
88 b[j] = c[j];
89 lenb = lenc;
90 memset(c,0,sizeof(c));
91 }
92 digit = n*digit; //½á¹ûµÄСÊýλÊý
93 len = lenb+1-digit; //ÕûÊý²¿·ÖλÊý
94
95 flag = 0;
96 for(i=lenb-len; i>=0; --i)
97 if(b[i] != 0)
98 {
99 flag = 1;
100 break;
101 }
102 if(flag==0)
103 {
104 for(i=lenb; i>=lenb-len+1; --i) //ûÓÐСÊýµãλ
105 printf("%d",b[i]);
106 printf("\n");
107 continue;
108 }
109
110 if(len==1 && b[lenb]==0) //ÕûÊý²¿·ÖΪ0
111 printf(".");
112 else
113 {
114 for(i=lenb; i>=lenb-len+1; --i)
115 printf("%d",b[i]);
116 printf(".");
117 }
118 for(i=0; i<=lenb-len; ++i)
119 if(b[i]!=0)
120 {
121 temp=i;
122 break;
123 }
124 for(i=lenb-len; i>=temp; --i)
125 printf("%d",b[i]);
126 printf("\n");
127 }
128 return 0;
129 }
130
2 using namespace std;
3 #define MAX 1000
4 int a[MAX],b[MAX],c[MAX],flag;
5 int lenr,lena,lenb,lenc,len,temp,digit;
6 char r[MAX];
7
8 int main()
9 {
10 int i,j,k,n;
11 while( scanf("%s%d",r,&n)!=EOF )
12 {
13 if(n==0)
14 {
15 printf("1\n");
16 continue;
17 }
18 lenr = strlen(r);
19 if(lenr==1 && r[0]=='0')
20 {
21 printf("0\n");
22 continue;
23 }
24 for(i=0; i<lenr; ++i)
25 if(r[i]!='.'&&r[i]!='0')
26 break;
27 if(i==lenr)
28 {
29 printf("0\n");
30 continue;
31 }
32 if(strchr(r,'.')==NULL) //¿¼ÂÇûÓÐСÊýµãµÄÇé¿ö
33 {
34 r[lenr] = '.';
35 r[lenr+1]='\0';
36 lenr++;
37 }
38 for(i=0; i<lenr-1; ++i)
39 {
40 if(r[i]!='0')
41 break;
42 if(r[i]=='0' && r[i+1]=='.')
43 {
44 strcpy(r,r+i);
45 break;
46 }
47 if(r[i]=='0' && r[i+1]!='0')
48 {
49 strcpy(r,r+i+1);
50 break; //È¥µôaµÄÇ°µ¼0
51 }
52 }
53 //cout<<r<<endl;
54 lenr = strlen(r)-1;
55 for(i=0; r[i]; ++i)
56 if(r[i]=='.')
57 break;
58 digit = lenr-i; //¼Ç¼СÊýµãλÊý
59 for(j=i; r[j]; ++j)
60 r[j] = r[j+1];
61 lenr--;
62 for(i=0; i<=lenr/2; ++i) //Êýλ·´×ª£¬±ãÓÚ¼ÆËã
63 {
64 temp = r[i];
65 r[i] = r[lenr-i];
66 r[lenr-i] = temp;
67 }
68 for(i=0; r[i]; ++i)
69 b[i] = a[i] = r[i]-'0';
70 lenb = lena = lenr;
71 for(i=1; i<=n-1; ++i) //¼ÆËãn´Î·½
72 {
73 for(j=0; j<=lenb; ++j)
74 for(k=0; k<=lena; k++)
75 {
76 c[j+k] += a[k]*b[j];
77 c[k+j+1] += c[j+k]/10;
78 c[j+k] %= 10;
79 }
80 k--;
81 j--;
82 if(c[k+j+1] != 0)
83 lenc = j+k+1;
84 else
85 lenc = j+k;
86
87 for(j=0; j<=lenc; ++j)
88 b[j] = c[j];
89 lenb = lenc;
90 memset(c,0,sizeof(c));
91 }
92 digit = n*digit; //½á¹ûµÄСÊýλÊý
93 len = lenb+1-digit; //ÕûÊý²¿·ÖλÊý
94
95 flag = 0;
96 for(i=lenb-len; i>=0; --i)
97 if(b[i] != 0)
98 {
99 flag = 1;
100 break;
101 }
102 if(flag==0)
103 {
104 for(i=lenb; i>=lenb-len+1; --i) //ûÓÐСÊýµãλ
105 printf("%d",b[i]);
106 printf("\n");
107 continue;
108 }
109
110 if(len==1 && b[lenb]==0) //ÕûÊý²¿·ÖΪ0
111 printf(".");
112 else
113 {
114 for(i=lenb; i>=lenb-len+1; --i)
115 printf("%d",b[i]);
116 printf(".");
117 }
118 for(i=0; i<=lenb-len; ++i)
119 if(b[i]!=0)
120 {
121 temp=i;
122 break;
123 }
124 for(i=lenb-len; i>=temp; --i)
125 printf("%d",b[i]);
126 printf("\n");
127 }
128 return 0;
129 }
130