delete[] n;
delete[] n1;
delete[] n2;
t = sl2 - sl1;
st1.erase(0, l1);
st2.erase(0, l2);
l1 = st.size();
// 对结果商字符串处理--以小数点为界分为整数部分和小数部分
for(i=0, b=0; i<l1; ++i)// 整数部分
{
if(st[i]=='.')
{
++i;
b = 1;
break;
}
if(b==0)// 除首0
{
if(st[i]=='0'&&st[i+1]=='.')
{
b = 1;
st1 += st[i];
}
if(st[i]!='0')
{
b = 1;
st1 += st[i];
}
}
else
{
st1 += st[i];
}
}
for(; i<l1; ++i)// 小数部分
{
st2 += st[i];
}
st.erase(0, l1);
l1 = st1.size();
l2 = st2.size();
// 移动小数点以得到准确值
if(t>0)// 小数点向右移动
{
st += st1;
if(st2.empty())// 小数部分为空则补0
{
for(i=0; i<t; ++i)
{
st += '0';
}
}
else
{
for(i=0; i<t; ++i)// 移进小数部分的相应位数值
{
if(i<l2)
{
st += st2[i];
}
else// 小数部分不够位数则补0
{
st += '0';
}
}
if(i<l2)// 添加小数
{
st += '.';
}
for(; i<l2; ++i)// 加入小数部分余下值
{
st += st2[i];
}
}
}
else// 小数点向左移动
{
f = 0;
for(i=0; i<l1+t; ++i)// 移入整数部分相应位数值
{
st += st1[i];
}
if(i<l1)// 还有整数未移入情况
{
if(st.empty())// 没有移入一位整数则补0
{
st += '0';
}
f = 1;
st += '.';// 添加小数点
}
for(j=i+t+l1; j<0; ++j)// 左移位数多于整数部分则补0
{
st += '0';
}
for(; i<l1; ++i)// 移入整数部分值
{
st += st1[i];
}
if(l2!=0&&f==0)// 还未添加小数点则添加小数点
{
st += '.';
}
st += st2;// 移入小数部分
}
l1 = st.size();
for(i=0, b=0; i<l1; ++i)// 对最后结果处理
{
if(b==0)// 除首0
{
if(st[i]=='0'&&st[i+1]=='.')// 整数部分为0则保留该0
{
b = 1;
s1 += st[i];
}
if(st[i]!='0')
{
b = 1;
s1 += st[i];
}
}
else
{
s1 += st[i];
}
}
cout<<s1<<endl;
return s1;
}