现在的位置: 首页 > 综合 > 正文

Exponentiation

2013年09月04日 ⁄ 综合 ⁄ 共 1758字 ⁄ 字号 评论关闭

题目链接地址:

http://acm.hdu.edu.cn/showproblem.php?pid=1063

 

代码:

#include<stdio.h>
#include<string.h>
void
multiply(char a[1000],char b[1000],char jj[1000])  //长整数乘法
{
int
t1=strlen(a),t2=strlen(b),i,j,pos=0,flag=0,k;
int
rr[1000];
memset(rr,0,sizeof(rr));
for
(i=0;i<t1;i++)
  for
(j=0;j<t2;j++)
  {

     rr[i+j]+=(a[i]-48)*(b[j]-48);
              rr[i+j+1]+=rr[i+j]/10;
              rr[i+j]%=10;
  }

   k=t1+t2+1;
         while
(k>=0&&!rr[k])k--;
         if
(k<0)
   {

    rr[0]=0;
    k=0;
   }

   for
(j=0;j<=k;j++)jj[j]=rr[j]+48;
   jj[k+1]='/0';
}

int
main()
{

   //freopen("1.in","r",stdin);
char r[10],m[10],jj[1000],tt[1000];
int
n,i,j,pos,cc,len1,len2,l,k,pp,flag,point;
while
(scanf("%s%d",r,&n)!=EOF)
{

  pos=0;
  flag=0;
  for
(i=0;i<=5;i++)
   if
(r[i]=='.')//判断有无小数点
   {
    flag=1;
       point=i;
       break
;
   }

  if
(flag) //有小数点
  {
   if
(r[0]=='0')
   {

    i=0;
       while
(r[i]=='0')i++;
       if
(r[i]=='.')
    {

     i++;
        k=5;
           while
(r[k]=='0')k--;
           for
(j=k;j>=i;j--)m[pos++]=r[j];
           m[pos]='/0';
           cc=k-i+1;
    }

    else if
(r[i]<='9'&&r[i]>='1')
    {

     k=5;
        while
(r[k]=='0')k--;
           cc=k-point;
        for
(pp=k;pp>=i;pp--)if(r[pp]!='.')m[pos++]=r[pp];
        m[pos]='/0';
    }
   }

   else

   {

    k=5;
       while
(r[k]=='0')k--;
       for
(i=k;i>=0;i--)
    {

     if
(r[i]=='.')cc=k-i;
           else
m[pos++]=r[i];
    }

    m[pos]='/0';
   }
  }

  else
//无小数点
  {
   j=0;
   while
(r[j]=='0')j++;
   for
(i=5;i>=j;i--)m[pos++]=r[i];
   cc=0;
   m[pos]='/0';
  }

  strcpy(tt,m);
  for
(i=1;i<n;i++)
  {

   multiply(tt,m,jj);
   strcpy(tt,jj);
  }

  len1=cc*n;
  len2=strlen(tt);
        if
(len1>=len2)
  {

   printf(".");
   for
(i=1;i<=len1-len2;i++)printf("0");
   for
(i=len2-1;i>=0;i--)printf("%c",tt[i]);
   printf("/n");
  }

  else

  {

   l=len2-len1;
   for
(i=len2-1;i>=0;i--)
   {

    printf("%c",tt[i]);
    if
(len2-1-i==l-1&&i)printf(".");
   }

   printf("/n");
  }
}

return
0;
}

抱歉!评论已关闭.