| ||||||||||
| 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 | |||||||||
为什么老是runtime error,本地运行正确啊!!!#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char result[161];
char R[161];
void mypower(char * R,char* R2,char * result){
char src[161];
char mid[161];
char midAdd[161];
int midAddIndex,midIndex,rigStartAdd;
int rigStart=sizeof(src)-1;
int i=0,temp=0,digit=0,length,length2,j;
midAddIndex=midIndex=rigStartAdd=sizeof(src)-1;
strcpy(src,R);
length=strlen(src);
length2=strlen(R2);
for( j=0;j<sizeof(src)-1;j++){
mid[j]='0';
}
mid[midIndex]='\0';
for(i=length-1;i>=0;i--){
if(src[i]=='.')
continue;
rigStartAdd--;
midIndex=rigStartAdd;
for( j=0;j<sizeof(src)-1;j++){
midAdd[j]='0';
}
midAddIndex=sizeof(src)-1;
midAdd[midAddIndex--]='\0';
temp=0;
for(j=length2-1;j>=0;j--){
if(R2[j]=='.')
continue;
digit=(src[i]-'0')*(R2[j]-'0');
digit=digit+temp;
midAdd[midAddIndex--]=digit%10+'0';
temp=digit/10;
}
midAdd[midAddIndex]=temp+'0';
temp=0;
for(j=sizeof(mid)-2;j>=0;j--){
temp=mid[midIndex]-'0'+midAdd[j]-'0'+temp;
mid[midIndex--]=temp%10+'0';
temp=temp/10;
}
mid[midIndex]=temp+'0';
}
i=0;
while(result[i]=mid[i])
i++;
}
int decimalNum(int n){
int m=0;
char * p=R;
while(*p!='\0'&&*p!='.'&&m<sizeof(R)){
p++;
m++;
}
if(*p=='\0')
return 0;
return (n*(strlen(R)-m-1));
}
void bigIntMulti(char *R,char re[5][161],int n){
int number;
int i,m,start,end,j;
number=decimalNum(n);
if((n%2)==1)
mypower(result,re[0],result);
n=n/2;
for( i=0;i<4;i++){
mypower(R,R,re[i+1]);
if((n%2)==1){
mypower(result,re[i+1],result);
}
n=n/2;
strcpy(R,re[i+1]);
}
end=sizeof(result)-2;
m=end-number;
for(start=0;result[start]=='0';start++);
for(i=0,j=start;j<=m;i++,j++){
result[i]=result[j];
}
if(number>0)
result[i++]='.';
if(m<start)
j=m+1;
for(;j<=end;i++,j++){
result[i]=result[j];
}
while(result[i]=='0'||result[i]=='.')
i--;
result[i+1]='\0';
printf("%s\n",result);
}
int main(){
char input[100][10];
int inputN[100];
char re[5][161];
int i=0,j;
double temp;
while(scanf("%s %d",input[i],&inputN[i])==2&&i<100)
i++;
for( j=0;j<i;j++){
temp=(double)strtod(input[j],NULL);
if( ( temp>=99.999) ||(temp<=0.0) ){
continue;
}
if((inputN[j]<=0)||(inputN[j]>25)){
continue;
}
result[0]='1';
result[1]='\0';
strcpy(R,input[j]);
strcpy(re[0],R);
bigIntMulti(R,re,inputN[j]);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator