概述
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
1≤A的长度≤100000,
1
≤
B
≤
10000
1≤B≤10000
1≤B≤10000,
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++)题目原文解题思路代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复