我是靠谱客的博主 平淡魔镜,最近开发中收集的这篇文章主要介绍ACWing 794. 高精度除法(C++)题目原文解题思路代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ACWing 794. 高精度除法(C++)

  • 题目原文
  • 解题思路
  • 代码

题目原文

ACWing 794. 高精度除法(原题链接)

题目描述
给定两个非负整数(不含前导 0) A A A B B B,请你计算 A / B A/B A/B 的商和余数。

输入格式
共两行,第一行包含整数 A A A,第二行包含整数 B B B

输出格式
共两行,第一行输出所求的商,第二行输出所求余数。

数据范围
1 ≤ A 的长度 ≤ 100000 1≤A的长度≤100000 1A的长度100000,
1 ≤ B ≤ 10000 1≤B≤10000 1B10000,
B B B 一定不为 0

输入样例:

7
2

输出样例:

3
1

解题思路

高精度整数(被除数)从高位至低位逐位除以普通整数(除数),每一位都会计算一次。

每一次计算都可能会产生余数,这些余数都会乘以10,再加上下一位的数作为下一次计算的被除数,如此往复循环,高精度整数最低为的计算结束后,此时循环结束,所留下的余数即为除法的最终余数,输出至结果中。

因为是从高位到低位进行计算,为方便与统一格式,计算结束后将高精度整数结果(商)逆序,并筛除前导0,得到最终结果。

代码

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
vector<int> div(vector<int> a, int b, int &r)
{
vector<int> c;
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();
return c;
}
int main()
{
string A;
int b;
cin >> A >> b;
vector<int> a, c;
for (int i = A.size() - 1; i >= 0; i -- ) a.push_back(A[i] - '0');
int r = 0;
c = div(a, b, r);
for (int i = c.size() - 1; i >= 0; i -- ) cout << c[i];
cout << endl << r << endl;
return 0;
}

最后

以上就是平淡魔镜为你收集整理的ACWing 794. 高精度除法(C++)题目原文解题思路代码的全部内容,希望文章能够帮你解决ACWing 794. 高精度除法(C++)题目原文解题思路代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部