UVA 748

#include<iostream> 
#include<cstring> 
#include<string> 
#include<cstdio> 
#include<fstream> 
#define maxn 10010 
using namespace std; 
 
int n; 
char m[maxn]; 
int mmm=0; 
 
void add(char *n1,char *n2,char *re)      //两数相加,结果存在re里面 
{ 
           int i=0,j=0; 
      int len1=strlen(n1); 
     int len2=strlen(n2); 
     int len11=strlen(re); 
    for(i=0;i<len11;i++)re[i]=0; 
  int tmp=0; 

  for(i=(len1>=len2?len1:len2)-1,j=0;i>=0;i--,len1--,len2--,j++) 
    { 
                if(len1>=1)re[j]+=(n1[len1-1]-'0'); 
               if(len2>=1)re[j]+=(n2[len2-1]-'0'); 
               re[j]+=tmp; 
              tmp=re[j]/10; 
            re[j]=re[j]+'0'; 
 } 
        if(tmp!=0)re[j++]=tmp+'0'; 
       char c1; 
 for(i=0;i<(j/2);i++) 
      { 
                c1=re[i]; 
                re[i]=re[j-i-1]; 
         re[j-i-1]=c1; 
    } 
} 
 
void one_mul(char *n,int a,char *re) 
{ 
  if(0==a){re[0]='0';re[1]='\0';return;} 
   int len=strlen(n); 
       int j=0,tmp=0; 
   for(;len>=1;len--,j++) 
    { 
                re[j]=(n[len-1]-'0')*a+tmp; 
              tmp=re[j]/10; 
            re[j]=re[j]+'0'; 
 } 
        if(tmp!=0)re[j++]=tmp+'0'; 
       re[j]='\0'; 
      char c1; 
 for(int i=0;i<(j/2);i++) 
  { 
                c1=re[i]; 
                re[i]=re[j-i-1]; 
         re[j-i-1]=c1; 
    } 
} 
 
void mul(char *n1,char *n2,char *re) 
{ 
  char tmp[maxn]; 
  char tmp1[maxn]; 
//       int len1=strlen(re); 
//   for(int i=0;i<len1;i++)re[i]=0; 
   int len2=strlen(n2); 
     for(int i=len2-1;i>=0;i--) 
        { 
                one_mul(n1,n2[i]-'0',tmp); 
               int j=strlen(tmp); 
               int k1=j+(len2-i)-1; 
             for(;j<k1;j++) 
                    tmp[j]='0'; 
              tmp[j]='\0'; 
             memcpy(tmp1,re,sizeof(tmp1)); 
            add(tmp1,tmp,re); 
        } 
} 
 
int chuli(char *c) 
{ 
    char tmp[maxn]; 
  int len=strlen(c); 
       int po=len; 
      int mark11=len; 
  for(int len1=len-1;len1>=0;len1--) 
        { 
                if(c[len1]=='.') 
         { 
                        po=len1; 
                 break; 
           } 
        } 
        for(int i=len-1;i>=0;i--) 
 { 
                if(i>po&&c[i]!='0') 
               { 
                        mark11=i; 
                        break; 
           } 
        } 
        int k=0,j=0; 
     int mark=0; 
      for(k=0;k<=mark11;k++) 
    { 
                if(mark==0&&c[k]!='0'&&c[k]!='.') 
                        mark=1; 
          if(1==mark&&c[k]!='.') 
           { 
                        tmp[j++]=c[k]; 
           } 
        } 
        if(j==0)tmp[j++]='0'; 
    tmp[j]='\0'; 
     memcpy(c,tmp,sizeof(tmp)); 
       mmm=len-mark11-1; 
        return po; 
} 
 
char mtmp[maxn]; 
char notchange[maxn]; 
 
void output(char *s,int a) 
{ 
 char tmpp[maxn]; 
 int len=strlen(s); 
       if(len<=a) 
        { 
                cout<<"."; 
         for(int i=0;i<a-len;i++) 
                  cout<<"0"; 
         cout<<s<<endl;; 
      } 
        else 
     { 
                for(int i=0;i<len;i++) 
            { 
                        if(i==len-a)cout<<"."; 
                     cout<<s[i]; 
                } 
                cout<<endl; 
        } 
} 
 
int main() 
{ 
//  freopen("test.txt","r",stdin); 
   while(cin>>m>>n) 
     { 
                mmm=0; 
//         memset(mtmp,0,sizeof(mtmp)); 
             int leeen=strlen(m); 
             int point_position=chuli(m); 
             memcpy(notchange,m,sizeof(m)); 
           for(int i=1;i<n;i++) 
              { 
                        memcpy(mtmp,m,sizeof(m)); 
                        memset(m,0,sizeof(m)); 
                   mul(notchange,mtmp,m); 
           } 
                output(m,(leeen-point_position-1-mmm)*n); 
//              cout<<m<<endl; 
       } 
        return 0; 
}

 

posted @ 2012-04-28 11:54  open your eyes  阅读(176)  评论(0编辑  收藏  举报