大数除法:把除法运算转化为减法运算
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1000005
char a[N],b[N];
int x[N],y[N],c[N<<1];
//用长度为len1的大整数p1减去长度为len2的大整数p2
// 结果存在p1中,返回值代表结果的长度,不够减返回-1,正好减完返回0
int SubStract( int *k1, int *k2, int len1, int len2 )
{
if( len1 < len2 )
return -1;
if( len1 == len2 )
{
//判断k1 > k2
for(int i=len1-1; i>=0; i-- )
{
if( k1[i] > k2[i] )
break;
else if( k1[i] < k2[i] )
return -1;
}
}
for(int i=0; i<=len1-1; i++ ) //从低位开始做减法
{
k1[i] -= k2[i];
if( k1[i] < 0 ) //若p1<0,则需要借位
{
k1[i] += 10; //借1当10
k1[i+1]--; //高位减1
}
}
for(int i=len1-1; i>=0; i-- ) //查找结果的最高位
if( k1[i] ) //最高位第一个不为0