老手来看,新手学学(高精度除法)

定义嘛,来看这个链接##

        老手来看,新手学学(高精度第一篇)-CSDN博客

今天来学本人觉得最难的高精度除法

        我这人朴实,上代码##

#include 
using namespace std;
 
const int MAXN = 300+4; //根据题目的最大值。+4为了防止A+B出现进位
char s1[MAXN] = {};//存储字符串
char s2[MAXN] = {};//存储字符串
int tmp[MAXN] = {};//交换用字符串
int a[MAXN] = {};//存储加数A
int b[MAXN] = {};//存储加数B
int c[MAXN] = {};//存储和B
 
int compare(int a[], int b[]) {
    //索引为0的数据为数组长度
    if (a[0]>b[0]) {
        return 1;
    } else if (a[0]0; i--) {
        if (a[i]>b[i]) {
            return 1;
        } else if (a[i]0; i--) {
            memset(tmp, 0, sizeof(tmp));
            //高位对齐
            numcpy(b,tmp,i);
 
            //
            while (compare(a, tmp)>=0) {
                c[i]++;
                //减法
                for (int j=1; j<=a[0]; j++) {
                    if (a[j]0 && c[c[0]]==0) {
            c[0]--;
        }
    }
 
    //逆序打印输出商和余数
    for (int i=c[0]; i>0; i--) {
        printf("%d", c[i]);
    }
    printf("\n");
    if (0==a[0]) {
        printf("0\n");
    } else {
        if (true==flaga) {
            printf("-");
        }
        for (int i=a[0]; i>0; i--) {
            printf("%d", a[i]);
        }
        printf("\n");
    }
 
    return 0;
}

还是那句话##

        三连啊!

你可能感兴趣的:(c++,算法)