【7. 高精度除法】

高精度除法

思路:

  • 高精度整数除以低精度的整数,商为C,余数为r。
  • 从高位依次除以低精度整数。商©存在数组中,r * 10 + 后一位,继续除以低精度整数。一直循环结束。
  • 去掉前导0

步骤:

  1. 为了和之前的高精度加法、减法、乘法模板一致,这里也是采用倒序存储,唯一不同的点是,这里是从高位进行运算,而之前都是从低位进行运算
  2. 设置余数,初始值 为0,高精度整数从高位依次除以低精度整数,商©存在数组中,余数 r * 10 + 后一位,继续运算。
  3. 进行翻转(之前高精度整数 123 + 10,倒序存放在数组中,从低位运算 321 + 01。而乘法需要从高位运算,所以需要翻转一下 )
  4. 去掉前导 0
  5. 倒序打印

举例在这里插入图片描述

代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// A / b,商是C, 余数是r
vector<int> div(vector<int> &A, int b , int &r) //r 是引用
{
   vector<int> C;
   r = 0;         
   for (int i = A.size() - 1; i >= 0; i --)
   {
       r = r * 10 + A[i];
       C.push_back(r / b);
       r %= b;
   }
   
   reverse(C.begin(), C.end());                         //翻转数组元素
   while (C.size() > 1 && C.back() ==0) C.pop_back();   //去掉前导0
   return C;
}

int main()
{
   string a;
   int b;
   
   cin >> a >> b;
   
   vector<int> A;
   for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
   
   int r;       //余数
   auto C = div(A, b ,r);
   
   for (int i = C.size() - 1; i >= 0; i --) printf("%d",   C[i]);
   cout << endl << r <<endl;
}
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆鸟_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值