| ||||||||||
| 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