高精度除法(高精度除以低精度)

问题一:解决数组的越界问题

被除数作为高精度数,在进行相除仍然需要以字符串的形式,相除后存在数组里,与之不同的是大数在存入数组时不需要进行反转,直接存入即可。

问题二:计算结果数组长度

高精度除以低精度结果最多与高精度的位数相同,因此结果数组的长度与高精度数的长度相同即可。

问题三:内部除法计算

根据乘法的竖式,在每一位上的数等于上一位的余数乘10加上该位上的数字,再除以除数。而每一次除法运算得到的余数等于上一位的余数乘10加上该位上的数字对除数取模。

问题四:去除多余的零

由于数组并不是倒叙的,所以从第一位开始看,如果是0,则跳过,从下一位开始打印。

问题五:打印数组

正序打印即可。

代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
string s;
int a[101], c[101];
void strintoint(string str,int des[])
{
	for (int i = 0; i <= str.size(); i++)
	{
		des[i+1] = str[i] - '0';
	}
}

int main()
{
	int b = 0;
	cin >>s>> b;
	strintoint(s, a);
	int la = s.size();
	int tmp = 0;
	for (int i = 1; i <= la; i++)
	{
		c[i] = (tmp * 10 + a[i]) / b;
		tmp = (tmp * 10 + a[i]) % b;
	}
	int lc = 1;
	while (c[lc] == 0 && lc < s.size()) lc++;
	for (int i=lc; i <= s.size(); i++) cout << c[i];
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值