一、算法背景

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐