该怎么改进这段代码
poj 1001
#include
int main()
{
char num[6],res[1000]={'\0'},res1[1000]={'\0'};
void mul(char res[1000],char res1[1000]);
int del(char num[6],char res[1000],int po);
int n,i,j,k,po=-1,len;
scanf("%s %d",num,&n);
for(i=0;i<6;i=i+1)
{
if(num[i]=='.')
{
po=i;
break;
}
}
len=del(num,res,po);
for(i=0;i<1000;i=i+1)
{
res1[i]=res[i];
}
for(i=0;i
{
mul(res,res1);
}
len=len*n;
if(len==0)
{
for(i=1000;i>=0;i=i-1)
{
if(res[i]!='\0')
{
printf("%c",res[i]);
}
}
}
else if(len<0)
{
for(i=0;i<1000;i=i+1)
{
if(res[i]=='\0')
{
break;
}
}
if(-len>=i)
{
putchar('.');
for(j=0;j<-len-i;j=j+1)
{
putchar('0');
}
for(j=i-1;j>=0;j=j-1)
{
putchar(res[j]);
}
}
else
{
for(j=i-1;j>=0;j=j-1)
{
if(j+1==-len)
{
putchar('.');
break;
}
putchar(res[j]);
}
for(k=j;k>=0;k=k-1)
{
putchar(res[k]);
}
}
}
return 0;
}
int del(char num[6],char res[1000],int po)
{
int i,j,k,len,left,right;
if(po==-1)
{
len=0;
for(i=0;i<6;i=i+1)
{
if(num[i]!='0')
{
break;
}
}
if(i==6)
{
res[0]='0';
}
else
{
for(j=5;j>=i;j=j-1)
{
res[5-j]=num[j];
}
}
}
else if(po==5)
{
len=0;
for(i=0;i<5;i=i+1)
{
if(num[i]!='0')
{
break;
}
}
if(i==5)
{
res[0]='0';
}
else
{
for(j=4;j>=i;j=j-1)
{
res[4-j]=num[j];
}
}
}
else if(po==0)
{
for(i=1;i<5;i=i+1)
{
if(num[i]!='0')
{
break;
}
}
if(i==6)
{
res[0]='0';
len=0;
}
else
{
for(j=i+1;j<6;j=j+1)
{
if(num[j]=='0')
{
for(k=j+1;k<6;k=k+1)
{
if(num[k]!='0')
{
j=k;
break;
}
else
{
len=-1;
break;
}
}
if(len==-1)
{
break;
}
}
}
len=i-j;
for(k=j-1;k>=i;k=k-1)
{
res[j-1-k]=num[k];
}
}
}
else
{
for(i=0;i
{
if(num[i]!='0')
{
left=i;
break;
}
}
if(i==po)
{
left=po;
}
for(i=5;i>po;i=i-1)
{
if(num[i]!='0')
{
right=i;
break;
}
}
if(i==po)
{
right=po;
}
if(left==right)
{
res[0]='0';
len=0;
}
else if(left==po)
{
len=po-right;
for(j=po+1;j<=right;j=j+1)
{
if(num[j]!='0')
{
left=j;
break;
}
}
for(i=right;i>=left;i=i-1)
{
res[right-i]=num[i];
}
}
else if(right==po)
{
len=0;
for(i=po-1;i>=left;i=i-1)
{
res[po-1-i]=num[i];
}
}
else
{
len=po-right;
for(i=right;i>=left;i=i-1)
{
if(i==po)
{
break;
}
res[right-i]=num[i];
}
for(i=po-1;i>=left;i=i-1)
{
res[right-i-1]=num[i];
}
}
}
return len;
}
void mul(char res[1000],char res1[1000])
{
int a,b,i,j,k;
int m[1000]={0},n[1000]={0},l[1000]={0};
for(a=0;a<1000;a=a+1)
{
if(res[a]=='\0')
{
break;
}
m[a]=(int)(res[a]-'0');
}
for(b=0;b<1000;b=b+1)
{
if(res1[b]=='\0')
{
break;
}
n[b]=(int)(res1[b]-'0');
}
for(i=0;i
{
k=i;
for(j=0;j
{
l[k]=l[k]+n[i]*m[j];
k=k+1;
}
}
for(i=0;i
{
if(l[i]>=10)
{
l[i+1]=l[i+1]+l[i]/10;
l[i]=l[i]%10;
}
}
for(i=0;i<1000;i=i+1)
{
if(l[i]==0)
{
for(j=i+1;j<1000;j=j+1)
{
if(l[j]!=0)
{
i=j;
k=0;
break;
}
else
{
k=-1;
}
}
if(k==-1)
{
break;
}
}
}
for(j=0;j
{
res[j]=(char)(l[j]+'0');
}
}
for(i=0;i<1000;i=i+1)
这里不应该是1000,实际char数组没有1000个有效元素啊。1000只是数组的最大长度而已