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 |
power(n,1.0/p)In Reply To:神呐 救救我吧 都做了很久了 还是个WA(附上代码,若您没心情看,给个建议也行,谢谢!!) Posted by:cpp050400448168 at 2005-10-08 20:15:17 > #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