大数除法2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值