Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
神呐 救救我吧 都做了很久了 还是个WA(附上代码,若您没心情看,给个建议也行,谢谢!!)#include <iostream.h> #include <string.h> #define N 1000 char result[1000]; char *str; int itempresult[1000],iresult[1000],imid[10]; int rlen,slen,irsize,itrsize,imsize,power,mid; int tool[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; void translate(int *cont,int size) //把cont里存的大整数转成字符串 { rlen=0; int intIndex=size-1; int ntool,i,temp; temp=cont[intIndex]; if(temp>=100) ntool=3; else if(temp>=10) ntool=2; else ntool=1; for(i=ntool-1; i>=0; i--){ result[rlen]=temp/tool[i]+'0'; temp%=tool[i]; rlen++; } intIndex--; while(intIndex>=0){ temp=cont[intIndex]; for(i=2; i>=0; i--){ result[rlen]=temp/tool[i]+'0'; temp%=tool[i]; rlen++; } intIndex--; } result[rlen]=0; } void calculate() //求mid的power次方 { int temp=mid; int i,j,k; imsize=0; while(temp>=N){ imid[imsize]=temp%N; imsize++; temp/=N; } imid[imsize]=temp; imsize++; for(i=0; i<imsize; i++){ itempresult[i]=imid[i]; } itrsize=imsize; irsize=0; for(i=1; i<power; i++){ for(j=0; j<irsize; j++){ iresult[j]=0; } for(j=0; j<imsize; j++){ for(k=0; k<itrsize; k++){ iresult[j+k]+=imid[j]*itempresult[k]; } } irsize=imsize+itrsize-1; for(j=0; j<irsize; j++){ if(iresult[j]>=N){ iresult[j+1]+=iresult[j]/N; iresult[j]%=N; } } while( iresult[irsize]){ iresult[irsize+1]=iresult[irsize]/N; iresult[irsize]%=N; irsize++; } if(i<power-1){ for(j=0; j<irsize; j++){ itempresult[j]=iresult[j]; } itrsize=irsize; } } if(power==1) translate(itempresult,itrsize); else translate(iresult,irsize); for(i=0; i<irsize; i++){ iresult[i]=0; } } void main() { int start,end; str=new char[200]; while(cin>>power>>str){ while(str[0]=='0') str++; slen=strlen(str); start=1; end=2147483647; while( start<=end ){ mid=start+(end-start)/2; // cout<<start<<' '<<mid<<' '<<end<<endl;/// calculate(); // cout<<"result:"<<result<<' '<<rlen<<endl;/// if( rlen>slen ) end=mid-1; else if( rlen<slen ) start=mid+1; else{ if(strcmp(result,str)==0 ){ cout<<mid<<endl; break; } else if(strcmp(result,str)>0){ end=mid-1; } else start=mid+1; } } } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator