大数除法实现方法

本文探讨了如何实现大数除法,详细介绍了算法思路和C++编程实现,适合对算法和大数处理感兴趣的读者。
摘要由CSDN通过智能技术生成

这是我在2020年4月12日发布在洛谷上的一篇博客,今天把它搬运到CSDN里来

//在正式开始之前,我们先来理一下思路,因为除数和被除数都太大了,所以我们不可以用正常的“/”来解决
//那怎么办呢?因为除法是减法的高级运算,所以我们可以转变成低级的减法,那么就是被除数一直减除数,直到减不了为止
//但是这些数太大了,如果这样做会太慢,那我们就在想想除法的竖式
//我们以100/5为例 :
/*
首先,100首位1除以5,不行
然后,往后加一位,10/5=2,商在第一个0的上面
最后,最后一位是0,不用管,直接他的头顶上商0 
*/ 
//既然我们要尽量不减少内容,那我们就干脆给除数加0加的和被除数一样(虽然有加的可能比被除数大,但是减法函数会处理的,后面有体现),最后最后把商商到对应位就可以了 
#include<cstdio>
#include<iostream>
#include<cstring>//头文件 
using namespace std;//命名空间 
int jianfa(int *p1,int *p2,int len1,int len2){
   //函数:减法,大整数减法函数,附带是否可减判断 ,返回内容:不可减返回-1否则返回答案长度,答案存在p1里 
	//p1:数字1,p2:数字2,len1、2:长度1、2 
	if(len1<len2){
   
		return -1;//如果p2长度比p1长(p2比p1大),那么首先不能减,返回-1 
	}
	if(len1==len2){
   //如果长度一样 
		for(int i=len1-1;i>=0;i--){
   //一个一个判断 
			if(p1[i]>p2[i]){
   //如果出现第一个不一样的数字p1[i]比p2[i]大(p1大于p2)那么就直接退出,说明可以减 
				break;//退出 
			}else if(p1[i]<p2[i]){
   //如果出现第一个不一样的数字p2[i]比p1[i]大(p2大于p1)那么就直接返回-1,说明不能减 
				return -1;//返回-1 
			}
		}
	}
	//两个数经历上面的磨炼都确定可以减了,那么下面就开始吧~ 
	for(int i=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值