Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

变态数也过了,还是WA

Posted by tbaitm at 2005-09-06 02:39:27 on Problem 1001
#include<iostream.h>
#include<string.h>
//----------
char* Mul(char* s1,char* s2)//标准乘
{int m=strlen(s1),n=strlen(s2),i,j,k,l,Max=m>n?m:n,p=0,q=0;
bool flag=0;
char* ans=new char[2*Max+1];
 for(i=0;i<2*Max+1;++i)
	 ans[i]=0;
 //去小数点
 for(i=0;i<m;i++)
	 if('0'==s1[0])
	 {for(j=0;j<m-1;j++)
	 s1[j]=s1[j+1];
	 m--;
	 i=-1;
	 }
	 else if('.'==s1[i])
	 {for(j=i;j<m-1;j++)
	 {s1[j]=s1[j+1];
	  p++;
	 }
	 m--;flag=1;
	 break;
	 }

for(i=0;i<n;i++)
     if('0'==s2[0])
	 {for(j=0;j<n-1;j++)
	 s2[j]=s2[j+1];
	 n--;
	 i=-1;
	 }
	 else if('.'==s2[i])
	 {for(j=i;j<n-1;j++)
	 {s2[j]=s2[j+1];
	  q++;
	 }
	 n--;flag=1;
	 break;
	 }
	 
//减'0'
for(i=0;i<m;i++)
    s1[i]-=48;
for(i=0;i<n;i++)
    s2[i]-=48;
//做乘法
for(i=n-1;i>=0;i--)
 {
  k=n-1-i;
  for(j=m-1;j>=0;j--)
  {
   ans[k]+=s2[i]*s1[j]; 
   int r=k++;
   do{
	   int t=ans[r];
	   ans[r]=t%10;
	   ans[++r]+=t/10;
   }while(ans[r]>10);
  }
 }

//加'0'
 for(i=0;i<2*Max+1;++i)
	 ans[i]+='0';
 //逆置
 i=2*Max;
 while('0'==ans[i--]);
 i++;
 int a=0,b=i;
 while(a<=i/2)
 {int t=ans[a];
  ans[a]=ans[b];
  ans[b]=t;
  a++;b--;
 }
 
//加小数点
 
  if(p+q)
  {if(p+q>i)
  {int kk=p+q-i;
   for(j=p+q;j>=kk;j--)
	   ans[j]=ans[j-kk];
   for(j=1;j<kk;++j)
	   ans[j]='0';
   ans[0]='.';
   i+=kk;
  }
  else 
  {for(l=i;l>i-(p+q);l--)
       ans[l+1]=ans[l];
  ans[i+1-(p+q)]='.';
  i++;
  }
 }
 
if(flag)
 { i=2*Max;
 while('0'==ans[i--]);
 i++;if('.'==ans[i])i--;
 }
 
  //返回值
 ans[++i]=0;return ans;
}
//----------
char* F(int n,char* s)//分治的递归函数
{
 if(1==n)return s;
 if(2==n)
{char* s1=new char[strlen(s)+1];
 strcpy(s1,s);
return Mul(s,s1);
}
 if(!(n%2))
 {char* t1=F(n/2,s),*t2=new char[strlen(t1)+1];
  strcpy(t2,t1);
  return Mul(t1,t2);
 }
 else 
 {char *t=new char[strlen(s)+1];
  strcpy(t,s);//记录s
  char *t1=F(n/2,t),*t2=new char[strlen(t1)+1];
  strcpy(t2,t1); 
  char* t3=Mul(t1,t2);
  return Mul(t3,s);
 }
}
//---------
void main()
{char s[6];
 int n;
while(cin>>s>>n)
 cout<<F(n,s)<<endl;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator