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 

 

 

posted on 2010-08-20 18:15  小影帆  阅读(266)  评论(0编辑  收藏  举报

导航