高精度除法(c++版本)
·
一、算法背景
https://blog.csdn.net/ssssjsn/article/details/157620627?spm=1001.2014.3001.5501
(同高精度加法)
二、 算法原理
1、依旧是先存储在字符串当中,然后逆序放在数组里面。
2、模拟除法操作,注意除法是从最高位开始计算的。
需要设置一个变量temp来接收每次除剩余的值 比如开始的第一个数是1 商是0 得出来t = 1, 然后让t进一步变一下 t = t * 10 + a[ i ] 为了下一步除法需要。
(1)相当于一直重复如下三句代码(初始令t = 0)
t = t * 10 + a[i]
c[i] = t / 45
t = t % 45

3、同样我们需要考虑前导零的情况,如图中是0027,我们我们只需要打印27即可。
三、代码实现
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N],c[N], b;
int len_a, len_c;
void divi(int c[], int a[], int b)
{
//注意 除法是从高位向低位除
long long int t = 0;
for(int i = len_a - 1; i >= 0; i--)
{
t = t * 10 +a[i];
c[i] = t / b;
t = t % b;
}
//处理前导零
while(len_c > 1 && c[len_c - 1] == 0) len_c--;
}
int main()
{
string x; cin >> x >> b;
//将字符串逆序放在数组当中
len_a = x.size(); len_c = len_a;
for(int i = 0; i < len_a; i++) a[i] = x[len_a - 1 - i] - '0';
//除法模拟
divi(c, a, b);
//输出
for(int i = len_c - 1; i >= 0; i--)
{
cout << c[i];
}
return 0;
}
更多推荐
所有评论(0)